6

我正在使用命令行 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
4

2 回答 2

15

简短的回答:你想在命令行上输入的是git difftool HEAD,而不是git difftool

长答案:这是正常的 git 行为,如果您没有意识到发生了什么,这会令人沮丧。我不确定为什么命令行差异按预期工作,但两者都git diff应该git difftool按照 git 手册页类似地执行:

git diff [--options] [--] [<path>...] 这个表格是用来查看你相对于索引(下一次提交的暂存区)所做的更改。换句话说,差异是你可以告诉 git 进一步添加到索引但你仍然没有。您可以使用 git-add(1) 暂存这些更改。

因此git diffgit difftool应该只向您展示未分级的更改。

如果您想查看分阶段的更改,您应该使用git diff --cachedandgit 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>...] 这个表格是用来查看你在工作树中相对于命名的<commit>的变化。您可以使用 HEAD 将其与最新提交进行比较,或者使用分支名称与不同分支的尖端进行比较。

于 2012-08-01T19:00:45.683 回答
1
git difftool --staged

会给你的。

staged在这种情况下是 的同义词cached,尽管我觉得staged更容易记住。

于 2013-04-24T17:34:13.997 回答