Wie kann man die Änderungen zwischen zwei Commits ohne dazwischen liegende Commits sehen?

Wie kann man erreichen, dass git diff nur den Unterschied zwischen zwei Commits anzeigt, ohne die anderen Commits dazwischen?

können Sie einfach die 2 Commits an git diff übergeben wie :

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

Nach der Differenz /zwischen/ zwei Commits zu fragen, ohne die Commits dazwischen einzubeziehen, macht wenig Sinn. Commits sind nur Momentaufnahmen des Inhalts des Repositorys; die Frage nach dem Unterschied zwischen zwei Commits schließt diese zwangsläufig mit ein. Die Frage ist also, wonach Sie wirklich suchen?

Wie William vorschlug, kann man durch Cherry-Picking das Delta eines einzelnen Commits auf der Basis eines anderen erhalten. Das ist es:

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

Dies nimmt Commit 'abcdef', vergleicht es mit seinem unmittelbaren Vorgänger und wendet dann diese Differenz auf '012345' an. Dieser neue Unterschied wird dann angezeigt - die einzige Änderung ist, dass der Kontext von '012345' kommt und nicht von 'abcdef's direktem Vorgänger. Natürlich kann es zu Konflikten usw. kommen, so dass dieses Verfahren in den meisten Fällen nicht sehr nützlich ist.

Wenn Sie nur an abcdef selbst interessiert sind, können Sie das tun:

$ git log -u -1 abcdef

Dies vergleicht abcdef allein mit seinem unmittelbaren Vorgänger und ist normalerweise das, was Sie wollen.

Und natürlich

$ git diff 012345..abcdef

alle Unterschiede zwischen diesen beiden Commits an.

Es würde helfen, eine bessere Vorstellung von dem zu bekommen, was Sie zu erreichen versuchen - wie ich bereits erwähnt habe, macht es keinen Sinn, nach dem Unterschied zwischen zwei Commits zu fragen, ohne zu wissen, was dazwischen liegt.

Kommentare (6)

Angenommen, Sie möchten den Unterschied zwischen den Commits 012345 und abcdef sehen. Das Folgende sollte das tun, was Sie wollen:

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