1. ホーム
  2. ギット

[解決済み】git diff ファイルを最後の変更と比較する

2022-04-06 01:07:05

質問

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

知っていればの話ですが。

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

次に git diff 456def myfile は、myfile の最後の変更を表示します。が生み出す知識なしで、同じことをすることは可能でしょうか? git log 123abcで何が変わったのか?

解決方法は?

これは実際に存在するのですが、その機能は 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 というオプションがあります。
  • を言及したChrisBettiの功績は大きい。 -n 1 オプションを、atatko が -1 バリアントです。
  • sweaver2112 のおかげで、実際にドキュメントを読みながら -p 意味的には、quot;meanes" です。
  • デフォルトでそうなっていることを指摘したOscar Scholtenの功績は大きい。 -p は、マージコミットの diff-contents を表示しません。