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の動作であり、何が起こっているのかわからない場合はイライラします。コマンドラインのdiffが期待どおりに機能する理由はわかりませんが、両方ともgit diffgitgit difftoolのマニュアルページと同様に機能するはずです。

git diff [--options] [-] [<path> ...]このフォームは、インデックス(次のコミットのステージング領域)に関連して行った変更を表示するためのものです。言い換えれば、違いはgitにさらにインデックスに追加するように指示できるものですが、まだ追加していません。git-add(1)を使用して、これらの変更をステージングできます。

したがってgit diffステージングgit difftoolされていない変更のみを表示する必要があります。

段階的な変更を確認する場合はgit diff --cachedgit difftool --cached代わりに次を使用する必要があります。

git diff [--options] --cached [<commit>] [-] [<path> ...]このフォームは、指定された<commit>に関連する次のコミットのためにステージングした変更を表示します。通常、最新のコミットとの比較が必要になるため、<commit>を指定しない場合、デフォルトでHEADになります。HEADが存在せず(たとえば、生まれていないブランチ)、<commit>が指定されていない場合、すべての段階的な変更が表示されます。--stagedは--cachedの同義語です。

最後に、ステージングされた変更とステージングされていない変更の両方を表示する場合は、3番目の形式を使用しgit diff HEADますgit difftool HEAD

git diff [--options] <commit> [-] [<path> ...]このフォームは、指定された<commit>に関連する作業ツリーの変更を表示するためのものです。HEADを使用して最新のコミットと比較したり、ブランチ名を使用して別のブランチの先端と比較したりできます。

于 2012-08-01T19:00:45.683 に答える
1
git difftool --staged

まさにそれをあなたに与えるでしょう。

stagedこの場合は、の同義語ですがcachedstaged覚えやすいと思います。

于 2013-04-24T17:34:13.997 に答える