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

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
M
MIT News - Artificial intelligence
L
LangChain Blog
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Azure Blog
Microsoft Azure Blog
J
Java Code Geeks
Recent Announcements
Recent Announcements
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
IT之家
IT之家
F
Fortinet All Blogs
博客园 - 聂微东
U
Unit 42
Martin Fowler
Martin Fowler
腾讯CDC
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
量子位
阮一峰的网络日志
阮一峰的网络日志
博客园 - Franky

git

SourceGit 和 Fork 怎么选?两个都用过的来聊聊 - V2EX 请问下,你们用 AI 开发个人项目的时候,会开几个分支? - V2EX 有一个 git 仓库合并问题,不知道怎么办才好 分析一个技巧让同事不知道我使用了 ai : git 忽略本地改动文件,实现不提交 Rebased, 一个 git 客户端 发现一个邪修快速清理 Git 项目里面空文件夹的方法🤡 不知道有没有什么其他标准做法. zig 写的 100kb 的 wasm 可以 http 读写任意 git 仓库 有人把 IDEA 的 git 客户端做出来了 问个关于 rebase 和 github pr 的奇怪的问题 idea 同款 git 客户端求推荐 有没有类似 JB 家的 Git 管理工具 大家自己的代码都是放在哪儿 分享一个在 Linux 上编译静态 Git 二进制的项目 上亿的 git 仓库如何做冷热存储分离呢 发现了一个极度臃肿的项目 有什么支持直接连接远程主机 git 仓库的 GUI 工具吗 KFCode 官网上线,做好用、靠谱、有趣的 Git 托管平台 git 工作流,大家现在用的什么样的? 很奇怪的一个现象,有没人知道是怎么回事,所有 LLM 都说 100%不会出现 我宣布,最好的 git 客户端是腾讯家的 ugit Fork 付费版有什么不同? 一位高级工程师的 GIT 需要熟悉到什么程度? 已经 push 到远程仓库的提交,如何修改某个用户的所有提交的邮箱啊 [求助下] 关于代码同步问题 一直不理解 Windows 下 git 的这个逻辑,我自己 clone 的仓库还不能删了? rm -force 也不行 分享一个 Git 存储库治理利器 - hot 代码有没有必要备份到多个远程仓库?比如 github 和 codeup。有必要的话最好怎么备份? 请教 git 里怎么删除记录 git 中如何将子分支的多个提交作为一个提交合并到主分支? git 切换分支问题
请教一个诡异的 git 问题
wind3110991 · 2026-06-17 · via git

事情的背景是,本人在开发中本地 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 么?