如何在Git GUI/CLI工具中查看冲突文件的传入变更?
各工具查看合并冲突传入变更的实现方法
以下方法覆盖全类型合并冲突场景,不局限于modify/delete冲突,适配你日常使用的所有工具:
TortoiseGit
TortoiseGit默认仅在modify/delete冲突弹窗提供Show changes入口,全场景通用操作路径如下:
- 在仓库目录右键打开菜单,进入
TortoiseGit > Check for modifications - 在变更列表中找到标记为冲突的目标文件,右键唤出操作菜单
- 选择
Diff between > "base" and "theirs",即可打开diff视图,完整展示待合并分支相对于共同祖先提交对该文件做的所有改动,和modify/delete弹窗里Show changes的效果完全一致 - 如果只想对比当前工作区文件和传入版本的差异,也可以选择
Diff against > "theirs"
SourceTree
所有冲突类型都支持直接查看传入变更:
- 合并触发冲突后,在文件状态面板找到冲突文件,右键点击
- 展开
Resolve Conflicts子菜单,选择Show Diff of Theirs (against base),即可弹出传入变更的完整diff - 打开内置的三方冲突解决窗口后,也可以在顶部diff视图切换栏直接选择
Theirs视图,不用退出解决界面就能查看对方的全部改动,包括没有触发冲突标记、已经自动合入工作区的代码行
Fork
Fork的冲突交互对传入变更的支持最完善:
- 冲突发生后,在工作区变更列表双击冲突文件,直接打开内置三方合并视图
- 视图顶部提供三个版本的快速切换入口:
Base(共同祖先版本)、Mine(当前分支版本)、Theirs(传入分支版本) - 点选
Theirs即可看到传入分支对该文件的全部改动,非冲突的自动合入代码也会完整高亮展示 - 也可以右键冲突文件,选择
Compare > Compare with theirs,直接打开双栏对比视图查看传入版本和当前版本的差异
Git CLI 别名方案
如果习惯使用命令行,可以配置两个全局别名,一条命令就能查看传入变更,自动适配所有冲突场景:
执行以下两条命令完成全局配置:
# 查看指定冲突文件的完整传入变更 git config --global alias.diff-incoming '!f() { git diff $(git merge-base HEAD MERGE_HEAD) MERGE_HEAD -- "$1"; }; f' # 一次性查看所有冲突文件的传入变更 git config --global alias.diff-incoming-all '!git diff $(git merge-base HEAD MERGE_HEAD) MERGE_HEAD -- $(git diff --name-only --diff-filter=U)'
配置完成后,合并触发冲突时:
- 执行
git diff-incoming <冲突文件路径>,即可输出指定文件的全部传入变更;如果你配置了可视化diff工具(比如VS Code、Meld),命令会自动调用可视化工具打开diff - 执行
git diff-incoming-all,会自动列出所有冲突文件,批量输出全部传入变更,不用逐个指定文件名
针对你提到的代码跨文件移动场景,以上所有方法展示的传入变更,都会完整包含对方分支新增的
const aVariableWhichWontConflict = calcIt(...)这类未触发冲突标记的改动,不会遗漏需要同步迁移的代码。
内容的提问来源于stack exchange,提问作者nvirth
相关产品推荐
相关产品推荐

