web-dev-qa-db-ja.com

最後の変更に対するgit diffファイル

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

それがわかっていれば、

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

それからgit diff 456def myfileはmyfileへの最後の変更を示します。 git logによって生成された知識なしで同じことをすることは可能です。 123abcの変更点

203
Chowlett

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

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

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

git log -p -1 <commit>

使用されるオプション:

  • -p(これも-uまたは--patch)は、git-logのマニュアルページでdeeeeeeeepに隠されており、実際にはgit-diffの表示オプションです。 logと一緒に使用すると、生成されるパッチ各コミットごととコミット情報が表示されます。--- 非表示指定された<path>に触れないコミットを隠します。 (この振る舞いは--full-diffの段落で説明されているので、各コミットの全差分が表示されます。)
  • -1just最新の変更を示しています指定されたファイル-n 1の代わりに-1を使用することができます);そうでなければallそのファイルの0以外の差分が表示されます。
  • --followは、名前変更前に行われた変更を確認するために必要です。

私が言うことができる限りでは、これはgit log(または同様のもの)を使用して介在するリビジョンの数を数えるかコミットのハッシュを決定することなくファイルに加えられた最後の変更を直ちに見る唯一の方法です。

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

クレジットが支払期日であるクレジット

  • この回答 のおかげでlog -pを発見しました。
  • FranciscoPugaの功績によるもので、--followオプションを見せてくれた この答え
  • -n 1オプションについて言及してくれたChrisBettiと、-1バリアントについて言及してくれたatatkoの功績。
  • 実際にドキュメントを読み、意味的に-pが何を意味するのかを理解させてくれたsweaver2112の功績。
179
Kyle Strand

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

git diff <commit> <path>

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

だからあなたの質問に対する答えは:

git diff HEAD^^ myfile
209
Francisco Puga

あなたがグラフィカルツールを使って大丈夫なら、これはとてもうまくいきます:

gitk <file>

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

6
Martin G