如何查看已合并的旧Git分支的变更内容?
查看已合并旧Git分支变更内容的方法
你执行git diff HEAD^ HEAD无结果,大概率是两种情况:要么这个旧分支只有初始提交(HEAD^不存在),要么该分支是通过快进合并并入主分支的,导致旧分支的HEAD和主分支的某个提交完全一致,自然没有差异输出。以下是几种可行的解决办法:
方法1:通过合并提交查看差异(非快进合并场景)
如果合并时生成了专门的合并提交(不是快进),可以这样操作:
- 先找到合并提交的哈希值:
或者直接运行git log --merges --oneline | grep "你的旧分支名"git log --oneline,找到带有Merge branch 'xxx'字样的提交,复制它的哈希值(比如abc123)。 - 查看该分支带来的所有变更:
合并提交有两个父节点,^2代表被合并分支的最后一个提交,执行:
或者直接用git diff abc123^2 abc123git show abc123,默认会展示合并提交的差异内容。
方法2:处理快进合并场景(无合并提交)
如果是快进合并,没有单独的合并提交,需要找到主分支合并前的状态和旧分支的最后提交对比:
- 找到旧分支的最后一个提交哈希:
git log old-branch --oneline -n 1 - 找到主分支合并前的提交:
用reflog查看主分支的历史操作记录:
找到类似git reflog show maindef456 HEAD@{5}: merge old-branch: Fast-forward的记录,复制前面的def456(这是主分支合并前的头)。 - 对比两者差异:
git diff def456 old-branch-last-commit-hash
方法3:通用对比法(不管合并方式)
直接对比旧分支与主分支的公共祖先,得到该分支所有的变更:
git diff $(git merge-base main old-branch) old-branch
git merge-base会找到两个分支最近的公共提交,这条命令能输出旧分支从公共祖先开始所有的修改内容,适用于任何合并场景。
内容的提问来源于stack exchange,提问作者Shaun Peh
相关产品推荐
相关产品推荐

