どこかで壊れたファイルがあり、まだ修正されている最後のポイントを見つけました。
gitを使用して、2つのコミットから1つのファイルを比較する方法、または実際にこれを再生する最良の方法であるかどうかを知りたいです!!
あなたの質問に直接答えるにsrc/toaster.c
は、現在master
のコミットと古い commit の間でファイルを比較したいとしf4l4f3l
ます。
git diff master f4l4f3l -- src/toaster.c
別の方法として、次のコマンドを使用して、そのファイルへのすべての変更を調べることができます。
git log -p -- src/toaster.c
ただし、より一般的には、特定のバグが導入されたコミットを見つけようとしている場合、git にはgit bisectと呼ばれる素晴らしいツールがあります。このツールに動作中のコミットと動作していないコミットを指定すると、バイナリ検索戦略を使用して、それらの間でテストする一連のコミットが提供されます。
次のコマンドで二等分を開始します。
git bisect start
次に、現在のコミットにバグがある場合は、次のようにします。
git bisect bad
次に、間違いなくバグがなかった古いコミットを見つける必要があります。これには特定のタグが付いている場合もあれば、数か月前のコミットを選択する場合もあります。が呼び出されたと仮定するとa12b3d
、次のようになります。
git checkout a12b3d
git bisect good
その時点で、git はテストする必要がある次のコミットを解決git checkout
し、そのコミットに移動するために行います。(これらのチェックアウトはすべて「切り離された HEAD」で行われるため、元のブランチ ポインターは変更されません。) 次に、そのコミットをテストし、バグがあるかどうかに応じてgit bisect good
orを実行します。git bisect bad
リビジョン間のこのバイナリ検索は、最初の悪いコミットにすばやく絞り込み、それがどれであるかを報告します。次に、行っていたことに戻るには、次のことができます。
git bisect reset
$ git diff $start_commit..$end_commit -- path/to/file
たとえば、ファイル「file.c」の現在と 2 回前のコミットの違いがわかります。
$ git diff HEAD^^..HEAD -- file.c
お役に立てば幸いです