Gitコミットの変更を確認するにはどうすればよいですか?


1549

私がそうgit diff COMMITすると、そのコミットとHEADの間の変更を確認しますが(私の知る限り)、その単一のコミットによって行われた変更を確認したいと思います。

diff/に明らかなオプションが見つからないのでlog、その出力が得られます。


回答:


1975

特定のCOMMITハッシュの差分を表示するには :

git diff COMMIT~ COMMITそのCOMMIT先祖との違いが表示されますCOMMIT。コマンドとその表記法に関するコマンドとgitrevisionsの詳細については、git diffのマニュアルページを参照してください。 ~

または、git show COMMIT非常によく似た処理を行います。(その差分を含むコミットのデータ-マージコミットではありません。)git show manpageを参照してください。


17
^ThomsonシェルとBourneシェル(その同義語|rcとその派生物(キャレット演算子)、およびzshExtendedglobが有効(not
グロビング

3
HEAD^コミットに複数の親がある場合(つまり、マージコミット)、最初の親を意味することに注意してください。
Mansour

23
git diff COMMIT~ COMMITキャレットの代わりにチルダに注意してください。私は、Windows 10上でGitのバージョン2.6.1.windows.1を実行している
Juuso Ohtonen

14
@tradetree:COMMITという単語は、SHA sumなどのコミットの名前に置き換えられることになっています。
Nick Matteo、2016年

91
この質問にはgit showの方が適していると思います。
pypmannetjies

497

親とのgit commitのdiffの省略形?」で述べたように、次のものでも使用できますgit diff

git diff COMMIT^!

または

git diff-tree -p COMMIT

git showを使用する場合、(diffのみに集中するために)以下を実行する必要があります。

git show --color --pretty=format:%b $COMMIT

COMMITパラメータがあるコミットっぽいです

オブジェクトコミットまたはオブジェクトを再帰的にコミット対象に間接参照することができます。以下はすべてコミットっぽいものです:コミットオブジェクト、コミットオブジェクトを指すタグオブジェクト、コミットオブジェクトを指すタグオブジェクトを指すタグオブジェクトなど。

commit-ishを参照するにはgitrevision「SPECIFYING REVISIONS」を参照してください。
Gitでtree-ishはどういう意味ですか?」も参照してください。


371

次の簡単な方法も試すことができます。

git show <COMMIT>

2
これはかなり異なることをしているようです
Miserable Variable

3
コミットメッセージのみを表示します。このコミットに適用されたコード変更の差分ではありません。
k0pernikus

1
はい、そうです?ついに最近のgitバージョンで...
Davy

2
これは、更新された正解である必要があります
Scott Skiles

1
これが答えになるはずです。
Roel

77

git show 最新のコミットで行われた変更を示します。

に相当しgit show HEADます。

git show HEAD~1 1コミット戻ります。


45

私は通常:

git diff HEAD~1

最後のコミットに関する変更を表示します。コミット数が多い場合は、数値1を確認したいコミットの差分数まで増やしてください。


34

まず、次を使用してコミットIDを取得します。

git log #to list all

または

git log -p -1 #last one commit id

コミットIDをコピーします。

ここで、2つのメソッドを使用して、特定のコミットからの変更をリストします。

方法1:

git diff commit_id^! #commit id something like this 1c6a6000asad012

方法2:

git show commit_id
For example: git show 1c6a600a

2
どういう^!意味ですか?
マルティン・コル

2
^!commit ^ .. commitの省略形です。つまり、すべての親を除外し、そのコミットの差分をチェックします
Mohideen bin Mohammed

私はエキスパートではありませんが、git log c ^!のケースがあります(複数のブランチが関係しています)。git log c ^ .. cとまったく同じではありません。実際、それははるかに優れています:git log c ^ .. cは、git log c ^!正しいことをしたので、これは私が長い間探していたものである
user829755

32
git show <commit_sha>

これにより、そのコミットの内容が表示されます。2つのコミット会社の間にスペースを置くだけで、範囲を指定できると思います。

git show <beginning_sha> <ending_sha>

これは、機能ログがすべて一列になるため、頻繁にリベースする場合に非常に役立ちます。


25

git-diff(1)のmanページから:

git diff [options] [<commit>] [--] [<path>…]
git diff [options] --cached [<commit>] [--] [<path>…]
git diff [options] <commit> <commit> [--] [<path>…]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>

真ん中の3番目のものを使用します。

git diff [options] <parent-commit> <commit>

同じmanページの下部にある「例」セクションにもあります。

$ git diff HEAD^ HEAD      <3>

最後のコミット前のバージョンと最後のコミットを比較します。

確かにそれは少し紛らわしい言葉で書かれています。

最新のコミットとその前のコミットを比較します。


3
言い換えると、に適用されgit diff HEAD HEAD^ます。
Richard

git diff HEAD ^ HEADは変更を表示しません。
user3690202 2015年

@ user3690202これは、表示する変更がないことを意味します。それは実際にそうですか?

表示を変更できないのはなぜですか?最後のコミットを表示したい場合、それが完全に新しいリポジトリでない限り、いくつかの変更が表示されますか?
user3690202 2015年

@ user3690202コマンドラインオプションでオーバーライド可能ですが、これをチェックして防ぐ組み込みの保護機能がありますが、実際には親からの変更を含まないGitで「空のコミット」を行うことができます。空のコミットを意図的に作成することはないと思います。別の可能性として、Gitに実際には変更が行われていないと思わせてしまうような、何らかの理由で行末変換(またはその他の面白い空白文字)を事前にコミットしている可能性があります。どのプラットフォームでGitを実行していますか?


16

別の可能性:

git log -p COMMIT -1

1
@GrantMcLeanはい、そしてそれはすでに最高の賛成投票の回答にあるので、私はそれについて言及しません。
John_West 2016

11

git diff HEAD HEAD^1親コミットとの差分を確認するために使用できます。

ファイルのリストのみを表示したい場合は、--statオプションを追加します。


git diff HEAD ^ 1 HEAD
Shibir Basak

これは、逆の比較を行うため、削除されたものとして追加されたものを表示することに注意してください。diffコマンドの読み方は次のとおりです。コミットHEADからコミットに変更するには、ファイルをどのように変更する必要がありますHEAD^1か?
ブレインプロット

9
git difftool COMMIT^ <commit hash>

difftoolを設定している場合も可能です。

difftoolの設定方法はこちら、 またはこちらのマニュアルページをご覧ください。

さらにgit diff-tree --no-commit-id --name-only -r <commit hash>、特定のコミットハッシュで変更/コミットされたファイルを確認するために使用できます


9

以下のコマンドで特定のコミットと最後のコミットを比較したい:

git diff <commit-hash>^-

例:

git diff cd1b3f485^-

6

コミットで作成者と時間を確認するには、を使用しますgit show COMMIT。これは次のような結果になります:

commit 13414df70354678b1b9304ebe4b6d204810f867e
Merge: a2a2894 3a1ba8f
Author: You <you@you.com>
Date:   Fri Jul 24 17:46:42 2015 -0700

     Merge remote-tracking branch 'origin/your-feature'

変更されたファイルを確認するには、上記のMerge行の値を使用して次のコマンドを実行しますgit diff --stat a2a2894 3a1ba8f

実際の差分を見たい場合は、 git --stat a2a2894 3a1ba8f


"実際の差分を見たい場合は、git --stat a2a2894 3a1ba8f"を実行してください。私はあなたの意味だと思うgit diff a2a2894 3a1ba8fか、他unknown option: --stat
フルーツ

5

完全な変更を確認するには:

  git diff <commit_Id_1> <commit_Id_2>

変更/追加/削除されたファイルのみをチェックするには:

  git diff <commit_Id_1> <commit_Id_2> --name-only

:コミットせずに差分を確認する場合は、コミットIDを入力する必要はありません。


4

私はWindows 10でGitバージョン2.6.1.windows.1を実行しているため、Nevikの回答を少し変更する必要がありました(キャレットの代わりにチルダ):

git diff COMMIT~ COMMIT

別のオプションは、キャレットを引用することです:

git diff "COMMIT^" COMMIT

3

次のコマンドは、Gitの親コミットハッシュを取得します。

git log -n 2 <commit-hash>

その後 git diff-tool <commit-hash> <parent-commit-hash>

例:

bonnie@bonnie ~/ $ git log -n 2 7f65b9a9d3820525766fcba285b3c678e889fe3

commit 7f65b9a9d3820525766fcba285b3c678e889fe3b
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 13:17:07 2016 +0530

CSS changed to maintain the aspect ratio of the channel logos and to fit them properly.

commit c3a61f17e14e2b80cf64b172a45f1b4826ee291f
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 11:28:09 2016 +0530

The ratio of the height to width of the channel images are maintained.

この後

git difftool 7f65b9a9d3820525766fcba285b3c678e889fe3b c3a61f17e14e2b80cf64b172a45f1b4826ee291f

2

最新のコミットでの変更を確認したいだけの場合は、単にそれgit showを提供します。


1

グラフィカルなビューでソースの変更を確認する場合、

$gitk (Mention your commit id here)

例えば:

$gitk HEAD~1 

なぜこの回答が反対票が投じられたのか理解できません。コマンドラインとテキストベースのものは行く方法であることに同意しますが、gitkは多くの有用な情報を提供します。
ShellFish
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.