惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
WordPress大学
WordPress大学
爱范儿
爱范儿
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
罗磊的独立博客
博客园_首页
V
V2EX
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
MyScale Blog
MyScale Blog
IT之家
IT之家
H
Help Net Security
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
人人都是产品经理
人人都是产品经理

程序员

V2EX 看到讨论"跨域"的帖子,那个她好像回来了 codex 今天真的是不稳定呀。 火山方舟 Coding Plan 慎买 刚问了大家 openclaw 和 hermes 在什么机器上面玩,求推荐一个机器 GPT-image-2 生成 AI 图片防伪有感 codex pro 5 小时限制已经严重缩水 逆天 Antigravity 动态 JSON 序列化对强类型语言很难吗? 自建了 GPT Coding Plan,遇到了定价问题,请教大家 大家都是在什么设备上玩 openclaw 以及 hermes 的呀? 软考还有一个月就考试了,你们学习了吗? 大伙用 AI 会考虑在 user scope 的 CLAUDE.md/AGENTS.md 里交代 AI 说中文吗 我发现程序员这个群体很大部分其实挺抠的 最近使用 cc 总会莫名其妙的返工, codex 不会 目前体验最好的远程 vibe 工具 想知道大佬们抓包遇到 ssl pinning 都是咋优雅的 解决的? 工业软件的大佬们是怎么 vibe coding 的 最近 chrome 是不是有 bug 啊,一搜索就卡住 分布式异步系统在 vibe coding 下的困境 PHP Native AOT 编译器,支持将 PHP 代码编译为可执行文件,运算性能提高 150 倍 没想到 2026 年,还要浪费大量时间在跨域问题上 DeepSeek V4 这周会出吗? 中转站正式试营 欢迎试用 不掺不假 小米 mimo 升级 v2.5,并且重置了额度 Jenkins, SCM 轮询完全不工作是啥问题啊 赛博斗蛐蛐, AI 模型的简单对比(白嫖版) 使用中转站要擦亮眼睛!不说别的,倍率计算 充值好乱。 买了火山的 Coding Plan 测试得出计费模式 给我的 AI 生成了简历和状态卡, 大家帮忙看下 Ta 能找到啥样的
请教一个诡异的 git 问题
wind3110991 · 2026-06-17 · via 程序员

事情的背景是,本人在开发中本地 feature 分支,git commit 了一个改动,commitid = 11111

然后执行 git merge origin master 到本地,生成了一个 MR commitid = 22222 此时:有 20+个文件修改合并到了 feature 分支

再执行了一波 git push origin feature 推送到远端。

此时,觉得好像修改整体有点问题,于是脑抽地执行了 git revert -m 1 22222 ( merge commit )

手动调整了一个 A 文件,再次 git commit ( commitid = 33333 ) 然后重新执行了 git push origin feature

于是我去 MR 到 master 了,此时按惯例检查 change list 并没有发现异常,MR 提示只有我修改的这个文件 A ,我便将这个文件 MR 到了 master 。

事情看起来好像没有什么不对,我以为回退了问题代码,并且 MR 检查 diff 也没问题,但是过了几天线上出问题了。。。有人陆续找我说自己 master 的代码“消失了”

检查了下,发现 checkout 到 master ,这 20+个文件的修改被“回退”了,而且 master 分支上有一个单独的 commit 记录:

Revert "Merge remote-tracking branch 'origin' into feature"

This reverts commit 22222, reversing
changes made to 33333.

紧急一顿通知恢复处理,评估影响+道歉。

事后回顾了下,有个比较大的疑点:为什么最后一次 MR 时,diff 里并没有提示 20+ 个文件实际发生了改动,而只 diff 出我 revert 后的这个文件 A 的改动,导致我没有及时发现 diff 有问题。

AI 分析了一波,结论大概是:

MR 合并时,Git 使用的是 三方合并( 3-way merge )

master:   A --- B --- C
                \       \
feature:         M --- R --- .proto fix


合并时 Git 的逻辑是:

    base:master 和 feature 的共同祖先
    master:没变
    feature:有 revert commit ( R )

👉 Git 看到的是:

    “feature 分支主动撤销了这些改动”

于是合并结果就是:

✅ 这些改动在 master 上也被撤销了

也就是说:

    feature 的 revert ,通过 MR 把 master 的内容给“反删了”
    
为什么 MR diff 里“看起来没事”?


原因是:

    MR diff 是 最新状态对比
    feature 上的 revert ,对 Git 来说:
        ✅ 不是“删除文件”
        ✅ 而是“对齐 master 并取消 merge 引入的差异”

这是 revert merge commit 最隐蔽、最危险的地方

看完分析,我依然觉得 git 这样设计很不合理。。。MR 不应该整体按照 feature 和 master 分支所有 commit 后,最终的 diff 来 MR 么?