web-dev-qa-db-ja.com

これらのgit diffコマンドの違いは何ですか?

次のgitコマンドの違いは何ですか?

  1. git diff HEAD
  2. git diff HEAD^
  3. git diff --cachedまたは同義語git diff --staged
  4. git diff
53
Matthew Rankin
  1. git diff HEAD-前回のコミット以降に何が変更されたかを示します。
  2. git diff HEAD^-コミット以降に何が変更されたかを示しますbefore最新のコミット。
  3. git diff --cached-git addを介してインデックスに追加されたが、まだコミットされていないものを表示します。
  4. git diff-git addを使用して、変更されたもののまだインデックスに追加されていないものを表示します。

次のようになります。

     Working
    Directory  <----+--------+------+
        |           |        |      |    
        |           |        |      |
        V           |        |      |    
    "git add"       |        |      |    
        |         diff       |      |    
        |           |        |      |    
        V           |        |      |    
     Index     <----+    diff HEAD  |            
        |           |        |      |       
        |           |        |      |
        V           |        |      |       
  "git commit"      |        |      |
        |     diff --cached  |      |
        |     diff --staged  |      |
        V           |        |      |
      HEAD     <----+--------+      |
        |                           |
        |                        diff HEAD^
        V                           |
previous "git commit"               |
        |                           |
        |                           |
        V                           |
      HEAD^    <--------------------+
114
Amber

Gitコミュニティブック から:

git diff

次のコミットのためにまだステージングされていない作業ディレクトリの変更が表示されます。

git diff --cached

インデックスと最後のコミットの違いを表示します。 「-a」オプションなしで「git commit」を実行した場合のコミット内容。

git diff HEAD

最後のコミット以降の作業ディレクトリの変更を示します。 「git commit -a」を実行した場合のコミット内容。

10
Matthew Rankin
  1. git diff HEAD:HEADと作業ディレクトリの違い。
  2. git diff HEAD^:HEAD)の直接の祖先と作業ディレクトリとの差分。
  3. git diff --cachedまたは同義語git diff --staged:HEADとインデックスの違い。
  4. git diff:インデックスと作業ディレクトリの差分。
9
wRAR

これらのコマンドを覚える簡単な方法を次に示します。

  • デフォルトでは、git diffのソースは作業ディレクトリと見なされ、そのターゲットはインデックスです。
  • --cachedフラグは、ソースをインデックスに変更します。引数を追加しても、ターゲットは必ずしも変更されません。しかし、便宜上、何も指定されていない場合、ターゲットは最後のコミットになります。
  • 引数としてコミットを追加すると、ターゲットが変更されます。
  • 引数として2つのコミットを追加すると、ソースとターゲットの両方がそれぞれ変更されます。

自分の好みに合わせて楽しんでください:)

5
gunby

HEADは、ツリー内の現在のHEADポインター、HEAD^HEADの前のコミットです。 --cachedわかりません。--cachedは、行ったがインデックスに追加していない変更を表示します。

Kernal.orgの git tutorial は非常に読みやすいです。

0
Josh K