You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何git diff master...MYBRANCH与git diff MYBRANCH...master结果不同?

为什么git diff master...MYBRANCH和git diff MYBRANCH...master结果不同?

先明确Git里git diff命令中三个点(...)的核心逻辑:

  • git diff X...Y 不是直接对比X、Y两个分支的完整差异,而是先找到X和Y的最近共同祖先提交,然后只展示Y分支相对于这个共同祖先的所有变更——说白了就是Y分支上独有的那些提交带来的改动。

结合你的场景来看:

  • 运行git diff master...MYBRANCH时,Git定位到master和MYBRANCH的共同祖先,然后对比这个祖先与MYBRANCH的差异,所以能看到你在MYBRANCH上做的所有新改动。
  • 而输入git diff MYBRANCH...master时,Git同样先找共同祖先,但接下来是对比这个祖先与master的差异。之所以没有输出,是因为从共同祖先之后,master分支没有新增任何提交——也就是说你是从当前的master分支切出的MYBRANCH,之后master没更新过,所有新改动都只在MYBRANCH上,master相对于共同祖先完全没变化,diff自然没内容。

举个直观的例子:
假设提交链是 master: A → B → C,你从C切出MYBRANCH后做了D、E两个提交:MYBRANCH: C → D → E。

  • git diff master...MYBRANCH 对比的是C和E,会显示D、E提交的所有改动。
  • git diff MYBRANCH...master 对比的是C和C,完全无差异,所以输出为空。

如果之后master也新增了提交(比如变成A→B→C→F),那git diff MYBRANCH...master就会显示F提交的改动了。

内容的提问来源于stack exchange,提问作者Scott C Wilson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:39:52