265

gitに、現在存在する特定のファイルと、それを変更した最後のコミットの前に存在していた特定のファイルとの差分を生成させることは可能ですか?

つまり、私たちが知っている場合:

$ git log --oneline myfile
123abc Fix some stuff
456def Frobble the foos
789dba Initial commit

次にgit diff 456def myfile、myfileへの最後の変更を表示します。によって生成された知識なしで同じことを行うことは可能git logです; 123abcで何が変わりましたか?

4

3 に答える 3

258

これは存在しますが、実際には次の機能ですgit log

git log -p [-m] [--follow] [-1] <path>

-p単一のコミットからのインライン差分を表示するためにも使用できることに注意してください。

git log -p -1 <commit>

使用されるオプション:

  • -p-uまたは--patch)はマニュアルページに隠されており、git-log実際にはの表示オプションですgit-diff。と一緒に使用すると、コミット情報とともに、コミットごとlogに生成されるパッチが表示され、指定されたに触れないコミットは非表示になります。(この動作は、の段落で説明されています。これにより、各コミットの完全な差分が表示されます。)<path>--full-diff
  • -mマージコミットにdiffコンテンツが含まれるようにします(そうでない場合、これら-pは指定されていないかのようにコミットメッセージを表示するだけです)。
  • -1指定されたファイルに対する最新の変更のみを表示します(代わりに使用できます)。それ以外の場合は、そのファイルのゼロ以外のすべての差分が表示されます。-n 1-1
  • --follow名前を変更する前に発生した変更を確認するには、が必要です。

私の知る限り、これは、ファイルに加えられた最後の変更セットをgit log、介在するリビジョンの数をカウントしたり、コミットのハッシュを決定したりすることなく(または同様に)すぐに確認できる唯一の方法です。

古いリビジョンの変更を確認するには、ログをスクロールするか、ログを開始するコミットまたはタグを指定します。(もちろん、コミットまたはタグを指定すると、正しいコミットまたはタグが何であるかを理解するという元の問題に戻ります。)

クレジットが必要な場合のクレジット:

  • この答えlog -pのおかげで私は発見しました。
  • FranciscoPugaの功績と、オプションを見せてくれたこの回答。--follow
  • -n 1オプションについて言及してくれたChrisBettiと、-1バリアントについて言及してくれたatatkoの功績です。
  • -pドキュメントを実際に読んで、意味的に「意味する」ことを理解させてくれたsweaver2112の功績です。
  • -pデフォルトでは、マージコミットのdiff-contentsが表示されないことを指摘したOscarScholtenの功績です。
于 2014-03-14T17:47:49.627 に答える
226

git diffを使用する方法の1つは、次のとおりです。

git diff <commit> <path>

そして、最後のコミットの1つのコミットを参照する一般的な方法は、実際のHEADへの相対パスとしてです。以前のコミットをHEAD^(この例では123abc)またはHEAD ^^(この例では456def)などとして参照できます...

したがって、あなたの質問に対する答えは次のとおりです。

git diff HEAD^^ myfile
于 2012-04-16T15:08:34.660 に答える
9

グラフィカルツールを使用して問題がない場合、これは非常にうまく機能します。

gitk <file>

gitkは、ファイルが更新されたすべてのコミットを表示するようになりました。コミットをマークすると、リスト内の前のコミットとの差分が表示されます。これはディレクトリでも機能しますが、選択したコミットを比較するファイルを選択することもできます。超便利!

于 2016-08-17T18:20:35.800 に答える