我正在使用命令行git和Kaleidoscope来执行我的代码审核。当我将分支合并到另一个分支并键入
时git difftool
Kaleidoscope仅显示“未提交以进行提交”的更改,并且不显示“未合并路径”或“已更改为已提交”。
命令行显示其余内容。
知道为什么吗?
这是我的〜/ .gitconfig
[user]
name = Dirty Henry
email = dirty@henry.com
[core]
excludesfile = /Users/dirty/.gitignore_global
editor = mate
[difftool "Kaleidoscope"]
cmd = ksdiff-wrapper git \"$LOCAL\" \"$REMOTE\"
[mergetool "sourcetree"]
cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
[diff]
tool = Kaleidoscope
[credential]
helper = osxkeychain
[difftool]
prompt = false
答案 0 :(得分:15)
简短回答:您希望在命令行上输入的内容为git difftool HEAD
,而不是git difftool
。
答案很长:这是正常的git行为,如果你没有意识到发生了什么,那就太令人沮丧了。我不确定为什么命令行差异按预期工作,但git diff
和git difftool
应该按照git手册页的方式执行:
git diff [--options] [ - ] [< path> ...] 此表单用于查看您对索引所做的更改(下一次提交的暂存区域)。换一种说法, 差异是你可以告诉git进一步添加到索引但你仍然没有。你可以上演这些 使用git-add(1)进行更改。
因此git diff
和git difftool
只会向您显示未分期更改。
如果您想查看暂存更改,请改为使用git diff --cached
和git difftool --cached
:
git diff [--options] --cached [< commit>] [ - ] [< path> ...] 此表单用于查看您为下一次提交相对于命名的< commit>而进行的更改。通常你会 想要与最新的提交进行比较,所以如果你不提供< commit>,它默认为HEAD。如果HEAD不存在 (例如,未分支的分支)和< commit>没有给出,它显示了所有阶段性的变化。 --staged是--cached的同义词。
最后,如果您想要查看分阶段和非分阶段更改,请使用第三种形式git diff HEAD
或git difftool HEAD
:
git diff [--options]< commit> [ - ] [< path> ...]此表单可供查看 工作树中相对于命名的更改 <提交取代。您可以使用HEAD将其与最新提交进行比较,或者a 分支名称与不同分支的小费进行比较。
答案 1 :(得分:1)
git difftool --staged
会给你这个。
在这种情况下, staged
是cached
的同义词,但我发现staged
更容易记住。