{HEAD,staged,working dir}之间的Git差异

时间:2017-07-27 11:32:32

标签: git

我有一个文件,我已更改为系统添加2个新功能。现在我只想提交分支上的一个功能。所以我使用git add -p进行了更改,现在我想验证我是否只获得了这一功能的部分并且我没有忘记任何部分。因此,我的想法是将{HEAD,staged,working dir}之间的差异视为差异。

我尝试为不同的文件获取正确的句柄,然后将其与git difftool调用结合起来。

HEAD:git show HEAD:src/autosub.py - > HEAD:src/autosub.py

上演:git show :src/autosub.py - > :src/autosub.py

工作目录:src/autosub.py

但合并后的通话不起作用:git difftool HEAD:src/autosub.py :src/autosub.py src/autosub.py

我做错了什么? THX!

1 个答案:

答案 0 :(得分:3)

git diff

  

git diff [options] [<commit>] [--] [<path>...​]

它只接受commit作为参数,并不打算用除提交之外的其他东西来做diff3 你必须分为两部分:

  • 获取工作目录与舞台之间的差异:git diff[tool]
  • 要获得舞台与HEAD之间的差异:git diff[tool] --staged(或git diff --cached

第二个是了解你将要提交的内容。

您可以配置diff.mnemonicPrefix以查看差异中的w(工作目录),i(索引/阶段)或c(提交/ HEAD)前缀而不是ab

如果你真的需要在WD / stage / HEAD之间做一个diff3:

git show HEAD:path > /tmp/head
git show :path > /tmp/staged
diff3 /tmp/head /tmp/staged path
rm /tmp/head /tmp/staged

您可以将它放在shell函数或脚本中,然后将其添加为alias

# Diff-3 between _C_ommit/_I_ndex/_W_orkingdir
git config --global alias.diff3ciw '! the_script'