10

どこかで壊れたファイルがあり、まだ修正されている最後のポイントを見つけました。

gitを使用して、2つのコミットから1つのファイルを比較する方法、または実際にこれを再生する最良の方法であるかどうかを知りたいです!!

4

2 に答える 2

14

あなたの質問に直接答えるに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 goodorを実行します。git bisect badリビジョン間のこのバイナリ検索は、最初の悪いコミットにすばやく絞り込み、それがどれであるかを報告します。次に、行っていたことに戻るには、次のことができます。

git bisect reset
于 2011-04-05T10:05:38.990 に答える
3
$ git diff $start_commit..$end_commit -- path/to/file

たとえば、ファイル「file.c」の現在と 2 回前のコミットの違いがわかります。

$ git diff HEAD^^..HEAD -- file.c

お役に立てば幸いです

于 2011-04-05T11:04:43.847 に答える