web-dev-qa-db-ja.com

上演された変更をのように見せるのですか?

私はコミットするためにいくつかの変更を行いました。次のコミットのために準備されているすべてのファイルの差分をどうやって見ることができますか? git status を知っていますが、実際の差分を見たいのですが、ステージングされているファイルの名前だけではありません。

git-diff(1) manページに、

git diff [--options] [ - ] […]

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

残念ながら、私はこれを理解できません。エイリアスを作成できる便利なワンライナーがあるはずです。

1906
Frerich Raabe

それだけでなければなりません:

git diff --cached

--cachedは、現在のHEADに対するキャッシュ/インデックスの変更(つまり段階的な変更)を表示することを意味します。 --staged--cachedの同義語です。

--staged--cachedHEADを指していません。HEADとの違いだけです。 git add --patch(またはgit add -p)を使ってコミットするものを選択した場合、--stagedはステージされたものを返します。

2338
CB Bailey

単純なグラフィックはこれをより明確にします:

Simple Git diffs

git diff

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

git diff --cached

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

git diff HEAD

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

また

365Gitにもう少し詳細があります。

1493
Abizern

横に並べて表示することに興味があるなら、 diffuse visual diffツールでそれを行うことができます。すべてではなく一部の変更がステージングされている場合でも、3つのペインが表示されます。衝突が発生した場合は、4つの枠があります。

Screenshot of diffuse with staged and unstaged edits

でそれを呼び出す

diffuse -m

あなたのGit作業コピーに。

あなたが私に尋ねるならば、最高の視覚的な違いは私が10年間見たことがあります。また、Gitに固有のものではありません。SVN、Mercurial、Bazaarなど、他の多数のVCSと相互運用できます。

以下も参照してください。 ステージングされたツリーと作業ツリーの両方をgit diffで表示しますか?

52
krlmlr

git status -v also は段階的な変更を示しています。 (ステージングする必要があるという意味 - git add - いくつかの変更。ステージングされた変更なし、git status -vとの差分なし。
それは Git 1.2.0、2006年2月 )からそうなります

長い形式(デフォルト)では、 git status には文書化されていない "冗長"オプションがあり、実際にはHEADとindexの間の差分が表示されます。

ステージングされたツリーと作業ツリーの両方をgit diffで表示しますか? 」(git 2.3.4以降、2015年第2四半期)を参照してください。

git status -v -v
45
VonC

このコマンドを使うことができます。

git diff --cached --name-only

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

24
Yash Patadia

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

git diff --staged
16
ML13

ビジュアルディフツールを使用する

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

ここでの一番上の答えは、Indexname__内のキャッシュされた/段階的な変更を表示する方法を正しく示しています。

$ git diff --cached

または別名である$ git diff --staged


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

デフォルトの答えはgit bashでの差分の変更を吐き出すでしょう(すなわちコマンドラインやコンソールで)。段階的なファイルの違いを視覚的に表現したい人のために、difftoolname__と呼ばれる、表示される各ファイルに対して視覚的な差分ツールを起動するスクリプトをgit内で利用できます。

$ git difftool --staged

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

ツールが起動すると、git diffスクリプトは視覚的なdiffツールが閉じるまで一時停止します。したがって、次のファイルを見るには各ファイルを閉じる必要があります。


Gitコマンドではdifftoolname__の代わりにdiffname__を常に使用できます

あなたのすべての視覚的なdiffの必要性のために、git difftoolはすべてのオプションを含むあらゆるgit diffコマンドの代わりに働きます。

例えば、各ファイルに対してそれを実行するかどうかを尋ねることなくビジュアル差分ツールを起動させるには、-yオプションを追加します(通常はこれが欲しいと思います)。

$ git difftool -y --staged

この場合、ビジュアル差分ツール内の各ファイルを1つずつプルアップし、ツールが閉じられた後に次のファイルを表示します。

Indexname__にステージングされている特定のファイルの差分を調べるには、次のようにします。

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

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

$ git difftool --help


Visual Gitツールの設定

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

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

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

14
LightCC

あなたの意図がリモートリポジトリブランチをプッシュターゲットにしていて、コミット変更ログでの最初のパスが不完全だった場合は、このようにプッシュする前にコミットステートメントを修正できます。

地元で

...いくつか変更を加えます...

git diff # look at unstaged changes

git commit -am"partial description of changes"

...コミットに記載されていないその他の変更を思い出してください...

git diff Origin/master#ステージされたがプッシュされた変更を見ていない

...段階的コミットステートメントを修正する...

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

git Push
8
Marc Condon

ステージング領域とリポジトリの比較には

$git diff --staged

Working vs Repository比較用

$ git diff 

しかし、ファイルが変更されてステージング領域($ git add fileName)に追加された場合、($ git diff)との違いを確認しようとします。ファイルはステージング領域にあり、リポジトリと比較されないため、違いはありません。

8
Goyal Vicky

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

7
Fred Schoen

デフォルトでは 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;
6
Deepak Dixit

git guigit-colaは、インデックスの表示と操作を可能にするグラフィカルユーティリティです。どちらもステージファイル用の簡単なビジュアル差分を含み、git-colaはより洗練された並列ビジュアル差分ツールも起動できます。

gitのインデックスからファイルを削除するにはどうすればいいですか? 、そしてこの公式カタログの Git - GUIクライアント

2
nobar

Gitに付属しており、変更を確認するのに非常に便利なgitkツールについても考えてください。

0
sam