2つのコミットの間の変更を、その間のコミットなしで見るには?

git diff」で、2つのコミット間の差分のみを表示し、その間の他のコミットは表示しないようにするにはどうしたらいいですか?

のように、2 つのコミットを git diff に渡すだけです。

-> git diff 0da94be  59ff30c > my.patch
-> git apply my.patch
解説 (14)

2つのコミットの間の差を求めるのに、その間のコミットを含まないのはあまり意味がありません。コミットはリポジトリの内容のスナップショットに過ぎず、2つのコミットの違いを求めることは、必然的にそれらを含むことになります。そこで問題となるのは、あなたが本当に求めているものは何かということです。

ウィリアムが提案したように、チェリーピックは、あるコミットを別のコミットに置き換えたときの差分を得ることができます。つまり。

$ git checkout 012345
$ git cherry-pick -n abcdef
$ git diff --cached

この例では、コミット 'abcdef' を取り上げ、その直近の祖先と比較し、その差_を '012345' の上に適用しています。そして、この新しい差分が表示されます。唯一の変更点は、コンテキストが 'abcdef'の直近の祖先ではなく '012345'から来ていることです。もちろん、コンフリクトなどが発生する可能性があるので、ほとんどのケースではあまり有用な処理ではありません。

abcdef自体に興味があるだけの場合は

$ git log -u -1 abcdef

これは abcdef とその直系の祖先である単独とを比較するもので、通常はこれが望ましいものです。

また、もちろん

$ git diff 012345..abcdef

は、この2つのコミット間のすべての相違点を表示します。

先に述べたように、2つのコミット間の差分を求めても、その間にあるものがなければ実際には意味がありません。

解説 (6)

コミット012345とabcdefの違いを見たいとします。 次のようにすれば、あなたが望むことができるはずです。

$ git checkout 012345
$ git cherry-pick -n abcdef
$ git diff --cached
解説 (1)