首页/开发/Git 与协作速查/git show :1:/:2:/:3: 读取冲突三版本
合并变基与冲突71 条

git show :1:/:2:/:3: 读取冲突三版本

冲突时索引保存三个版本::1: 共同祖先、:2: 当前分支、:3: 对方;用 git show 可分别查看,配合 diff 精确理解差异。

Git 与协作速查开发更新于 2026-10-13

冲突里的三个版本

冲突发生时,Git 会把冲突文件的三个版本同时放进索引:阶段 1 是共同祖先版本,阶段 2 是当前分支版本,阶段 3 是对方版本。用 git show :1:文件 这样的写法可以把它们分别取出来看,比盯着冲突标记推测更快弄清双方各自改了什么。

基本信息

读取方式git show :1:<文件> / :2:<文件> / :3:<文件>
含义1=共同祖先,2=当前分支,3=对方
派生用法git diff :2:文件 :3:文件 直接对比两方版本
适用时机三路合并产生冲突时排查
配套命令git ls-files -u 列出冲突文件的阶段信息

典型使用场景

  • 冲突标记看不懂时,分别取出三个版本对照判断
  • 想弄清对方到底改了什么,先比对共同祖先与对方版本
  • 冲突文件较多时逐个导出到临时目录,用对比工具统一查看
  • 解决完成后再回看原始三方版本,确认没有漏掉任何一侧的改动
  • 排查自动合并结果异常时,确认基线版本的实际内容

常用示例

常用示例
git show :1:src/app.js > /tmp/app.base.js    # 共同祖先版本
git show :2:src/app.js > /tmp/app.ours.js    # 当前分支版本
git show :3:src/app.js > /tmp/app.theirs.js  # 对方分支版本
git diff --no-index /tmp/app.ours.js /tmp/app.theirs.js  # 直接对比两方
git ls-files -u src/app.js                   # 列出该文件的冲突阶段信息

阶段读法

写法含义什么时候看
:1:文件共同祖先版本判断双方各自偏离了哪里
:2:文件当前分支版本确认为自己这一侧改了什么
:3:文件对方分支版本确认对方改了什么
想弄清对方到底改了什么,先对比共同祖先与对方版本,比直接读冲突标记更快,也更不容易误判。
冒号版本语法读取的是索引与树对象,工作区里的普通文件要用普通路径读取,两种写法不要混用。冲突较多时,把这些版本导出到临时目录再用对比工具逐个查看,比在终端里反复切换命令效率高得多,也能避免看错文件。

易错点

  • 冒号版本语法只能读索引与树对象,用它去读工作区文件会报错
  • 冲突解决并暂存后阶段版本会被覆盖,事后再想取回祖先版本就取不到了,需要时先导出留存
  • 只看冲突标记不复核三方版本,容易漏掉某一侧的改动
  • 在冲突尚未解决时直接提交,会把冲突标记一起写进历史

数据来源与参考

  • Git 官方文档:gitrevisions(:n:path 语法)
  • Pro Git 2nd Edition · 7.8 高级合并
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌