gitにコミットする前にファイルの変更内容を確認するにはどうすればよいですか?


351

1つまたは2つのチケットで作業しているときに、一歩離れると、作業内容、変更内容などがわかりません。

git addしてからgit commitする前に、特定のファイルに加えられた変更を確認する方法はありますか?

回答:


525

あなたが探していgit diffます。正確な状況に応じて、3つの便利な使用方法があります。

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

ディレクトリで再帰的に動作し、パスが指定されていない場合は、すべての変更が表示されます。


1
@ sveilleux2いいえ、引数なしでgit diffを実行するだけです-回答の最後の文にあるように、パスが指定されていない場合、すべての変更が表示されます。(上の角括弧[filename]はオプションの引数を示します。)これで、*シェルにすべてのファイルをリストさせることができるため、サブディレクトリにいる場合は、そのサブディレクトリ(リポジトリ全体ではなく)にあるものだけを取得できます。隠しファイルの変更を見逃します。
Cascabel、

#現在のコミットとインデックスの違いを表示#つまり、コミットしようとしているものgit diff --cached [filename]どういう意味ですか:#現在のコミットとインデックスの違いを表示#つまり、あなたが何をしているかプッシュ?git diff --cached [ファイル名]
ofarooq

3
ファイルを追加した後(つまり、「git add」の後)に行われた違いを確認するには、「git diff --staged [filename]」を実行します
Sidtharthan

ああ、なぜそんなに複雑なのですか。数十のファイルがある場合はどうなりますか?.. gitインターフェースに不平を言っているだけです...そうですね、git add -pすべてのファイルを検査する代替手段です。
カービィ

@Jefromi- git diff --staged [filename]主な答えを追加することを検討してください。これはより頻繁に必要とされる状況です。
Lazarus Thurston



8

私にとってgit add -pは、ステージングされていないすべての変更を確認するための最も便利な方法(およびgit開発者が意図していると思いますか?)(各ファイルの差分が表示されます)、コミットに伴う変更の適切なセットを選択します。それらのすべてをステージングし、次にを使用git commitして、次のコミットで繰り返します。次に、さまざまなファイルで行われた場合でも、各コミットを有用または意味のある一連の変更にすることができます。また、チケットまたは同様のアクティビティごとに新しいブランチを作成し、checkout(おそらくgit stash、切り替える前にコミットしたくない場合は使用して)を使用してそれらを切り替えることをお勧めしますが、多くの迅速な変更を行う場合、これは面倒な場合があります。頻繁にマージすることを忘れないでください。


したがって、git add file nameの代わりにgit add -p?
ティモシーT.

1
git add -pはステージングの組み合わせであり、ステージングできる変更を確認し、対話形式で1つずつ選択します。git add -pの詳細については、Gitファイルの一部のみコミットするをご覧ください。
Angelos Asonitis

5

git diff

作業ツリーとインデックスまたはツリー間の変更、インデックスとツリー間の変更、2つのツリー間の変更、またはディスク上の2つのファイル間の変更を表示します。


引用は少なすぎます-デフォルトでは、最初の比較を実行します:作業ツリーとインデックスの間。
Cascabel 2010

4

ファイルではなく変更をコミットしていることを忘れないでください。

このため、git add -p変更を追加するために私が使用しない(またはmagitで同等の)ことは非常にまれです。


2
gitは変更に対応していません -あたかもそれを扱っているかのように考えようとすることが、混乱と間違いの主な原因です。gitはスナップショットを扱います。
Chris Dodd 2017

3
git diff <path>/filename

pathは、ファイルまでの完全なシステムパスにすることができます。または
、プロジェクトにいる場合は、
パスを使用して変更されたファイルにも変更されたファイルパスを貼り付けます。git status


2

さて、あなたがファイルリストを気にしたくないときの私のケース。全部見せてください。

git addファイルリストを使用して既に実行している場合:

$ git diff --cached $(git diff --cached --name-only)

より新しいバージョンのでは、の同義語であるもgit使用できます。--staged--cached

同じことは、ファイルを追加していないが--cachedオプションなしで使用できます。

$ git diff $(git diff --name-only)

「キャッシュ」オプションのGitコマンドエイリアス:

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'

3
詳細をありがとうgit diff --cached --name-onlyは私が探していたコマンドでした...
Doogle

1

それぞれのgitリポジトリに移動して、以下のコマンドを実行します。

git diffファイル名

変更がマークされたファイルが開き、Return / Enterキーを押してファイルを下にスクロールします。

PSファイル名には、ファイルの完全なパスを含める必要があります。そうでない場合は、ファイルのそれぞれのディレクトリ/フォルダーに移動して、完全なファイルパスなしで実行できます。


0

git対応のテキストエディタを使用することもできます。変更された線の色、追加された線の別の色、削除された線の別の色などが表示されます。

これを行う優れたテキストエディタは、GitHubのAtom 1.0です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.