2395

コミットするいくつかの変更をステージングしました。次のコミットのためにステージングされたすべてのファイルの差分を確認するにはどうすればよいですか? 私はgit statusを認識していますが、ステージングされたファイルの名前だけでなく、実際の差分を確認したいと思います。

git-diff(1)のマニュアルページに次のように書かれているのを見ました

git diff [--オプション] [--] […]

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

残念ながら、私はこれを完全に理解することはできません。エイリアスを作成できる便利なワンライナーがいくつかあるはずですよね?

4

16 に答える 16

2910

それはただあるべきです:

git diff --cached

--cachedは、キャッシュ/インデックスの変更 (ステージングされた変更) を現在のHEAD. --stagedの同義語です--cached

--staged--cachedは指していませHEADHEADgit add --patch(またはgit add -p)を使用してコミットするものを選択すると、--stagedステージングされたものが返されます。

于 2009-10-19T10:07:10.820 に答える
1693

シンプルなグラフィックはこれをより明確にします:

シンプルな Git 差分

git差分

作業ディレクトリとインデックスの間の変更を表示します。これは何が変更されたかを示していますが、コミットのためにステージングされていません。

git diff --cached

インデックスと HEAD (このブランチの最後のコミット) の間の変更を表示します。これは、インデックスに追加され、コミットのためにステージングされたものを示しています。

git diff HEAD

作業ディレクトリと HEAD (インデックスの変更を含む) の間のすべての変更を表示します。これは、コミットのためにステージングされたかどうかに関係なく、最後のコミット以降のすべての変更を示しています。

また

365Gitについてもう少し詳しく説明します。

于 2009-10-19T10:27:21.643 に答える
61

ステージングされた変更git status -v 表示されることに注意してください。(ステージングする必要があることを意味します -- git add-- いくつかの変更。ステージングされた変更はありませんgit status -v。との差分はありません。Git 1.2.0、2006 年 2 月
以降はそうです)

長い形式 (デフォルト) ではgit status、文書化されていない「verbose」オプションがあり、HEAD とインデックスの間の差分を実際に表示します。

そして、それはさらに完全なものになろうとしています: 「ステージングされたツリーと作業ツリーの両方を git diff で表示しますか?」 (git 2.3.4+、2015 年第 2 四半期) を参照してください。

git status -v -v
于 2015-03-18T07:22:26.003 に答える
56

視覚的に並べたビューに興味がある場合は、拡散視覚差分ツールを使用してそれを行うことができます。すべてではなく一部の変更がステージングされている場合でも、3 つのペインが表示されます。競合が発生した場合は、4 つのペインも表示されます。

ステージ編集とステージ編集なしの拡散反射光のスクリーンショット

で呼び出します

diffuse -m

Git 作業コピーで。

あなたが私に尋ねると、私が10年間見た中で最高のビジュアル違い. また、Git に固有のものではありません。SVN、Mercurial、Bazaar など、他の多数の VCS と相互運用できます。

参照:ステージングされたツリーと作業ツリーの両方を git diff に表示しますか?

于 2012-10-24T21:05:35.580 に答える
28

このコマンドを使用できます。

git diff --cached --name-only

--cachedオプションはgit diffステージングされたファイルを取得することを--name-only意味し、オプションはファイルの名前のみを取得することを意味します。

于 2016-08-31T10:05:37.643 に答える
24

ビジュアル差分ツールの使用

デフォルトの回答 (コマンド ラインで)

ここでの上位の回答は、次のキャッシュ/ステージングされた変更を表示する方法を正しく示していますIndex

$ git diff --cached

または$ git diff --stagedエイリアスです。



代わりに Visual Diff ツールを起動する

デフォルトの回答は、git bash で (つまり、コマンド ラインまたはコンソールで) diff の変更を吐き出します。ステージングされたファイルの違いを視覚的に表現したい場合は、コマンド ラインでファイルを表示するのではなく、表示されたファイルごとに視覚的な差分ツールを起動するスクリプトを git 内で使用できますdifftool

$ git difftool --staged

これは と同じことを行いますがgit diff --staged、diff ツールが実行されるたびに (つまり、ファイルが diff によって処理されるたびに)、デフォルトのビジュアル diff ツールが起動されます (私の環境では、これはkdiff3です)。

ツールの起動後、ビジュアル差分ツールが閉じられるまで git diff スクリプトは一時停止します。したがって、次のファイルを表示するには、各ファイルを閉じる必要があります。



in git コマンドdifftoolの代わりにいつでも使用できますdiff

すべてのビジュアル差分のニーズに対して、すべてのオプションを含むgit difftool任意のgit diffコマンドの代わりに機能します。

たとえば、ファイルごとに実行するかどうかを確認せずにビジュアル差分ツールを起動するには、-yオプションを追加します (通常はこれが必要になると思います!!)。

$ git difftool -y --staged

この場合、ビジュアル差分ツールの各ファイルを一度に 1 つずつ取得し、ツールを閉じた後に次のファイルを表示します。

または、ステージングされた特定のファイルの差分を確認するにはIndex:

$ git difftool -y --staged <<relative path/filename>>

すべてのオプションについては、man ページを参照してください。

$ git difftool --help


ビジュアル Git ツールのセットアップ

デフォルト以外のビジュアル git ツールを使用するには、次の-t <tool>オプションを使用します。

$ git difftool -t <tool> <<other args>>

または、別のデフォルトのビジュアル差分ツールを使用するように git を構成する方法については、difftool のマニュアル ページを参照してください。



.gitconfigdiff/merge ツールとしての vscode のエントリ例

difftool のセットアップの一部には、.gitconfigファイルを舞台裏で変更する git コマンドを使用するか、ファイルを直接編集するかのいずれかで、ファイルを変更することが含まれます。

は、Unix や通常の Windows.gitconfigなどのホーム ディレクトリにあります)。~c:\users\<username>

.gitconfigまたは、デフォルトの Git エディターでユーザーを開くことができますgit config -e --global

.gitconfig差分ツールとマージ ツールの両方としての VS Codeのグローバル ユーザーのエントリの例を次に示します。

[diff]
    tool = vscode
    guitool = vscode
[merge]
    tool = vscode
    guitool = vscode
[mergetool]
    prompt = true
[difftool "vscode"]
    cmd = code --wait --diff \"$LOCAL\" \"$REMOTE\"
    path = c:/apps/vscode/code.exe
[mergetool "vscode"]
    cmd = code --wait \"$MERGED\"
    path = c:/apps/vscode/code.exe
于 2017-08-14T23:33:54.663 に答える
18

バージョン 1.7 以降では、次のようになります。

git diff --staged
于 2016-07-19T17:39:08.290 に答える
9

If your intentions are to push-target a remote repo branch and your first pass at a commit change log were incomplete, you can correct the commit statement before pushing like this.

Locally

... make some changes ...

git diff # look at unstaged changes

git commit -am"partial description of changes"

... recall more changes unmentioned in commit ...

git diff origin/master # look at staged but not pushed changes

... amend staged commit statement ...

git commit --amend -m"i missed mentioning these changes ...."

git push
于 2015-10-14T18:32:08.093 に答える
8

段階的な変更を含むファイルが複数ある場合は、 を使用してgit add -iから を選択し6: diff、最後に目的のファイルを選択する方が実用的です。

于 2012-03-14T14:30:29.843 に答える
7

デフォルトでは、 git diffは、git 更新ファイルのリストに追加されていない変更を表示するために使用されます。しかし、追加またはスタギングされた変更を表示したい場合は、スタギングまたは追加されたファイルdiffに関心があることを git に知らせる追加のオプションを提供する必要があります。

$ git diff          # Default Use
$ git diff --cached # Can be used to show difference after adding the files 
$ git diff --staged # Same as 'git diff --cached' mostly used with latest version of git 

$ git diff 
diff --git a/x/y/z.js  b/x/y/z.js index 98fc22b..0359d84 100644
--- a/x/y/z.js 
+++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {

-        if (a)
+        if (typeof a !== 'undefined')
             res = 1;
         else
             res = 2;

$ git add x/y/z.js
$ git diff
$

ファイルを追加すると、デフォルトの 'git diff' を使用できなくなります。次のようにする必要があります:-

$ git diff --cached
diff --git a/x/y/z.js  b/x/y/z.js index 98fc22b..0359d84 100644
    --- a/x/y/z.js 
    +++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) {

    -        if (a)
    +        if (typeof a !== 'undefined')
                 res = 1;
             else
                 res = 2;
于 2017-11-20T06:30:23.373 に答える
2

git guiおよびgit-colaインデックスを表示および操作できるグラフィカル ユーティリティです。どちらにも、ステージングされたファイルの単純な視覚的な差分が含まれておりgit-cola、より洗練された並列の視覚的な差分ツールを起動することもできます.

How to remove a file from the index in git?で私の密接に関連する回答を参照してください。、およびこのGit-GUI クライアントの公式カタログもあります。

于 2016-04-13T14:31:27.157 に答える
0

gitkgit で提供され、変更を確認するのに非常に役立つツールについても考えてください。

于 2016-08-03T10:40:51.427 に答える