Eigentlich allegit diff
s sind Festschreibungspaarweise: die oben vergleicht die Bäume/Dateien in abc000
gegen die in def555
. Wenn zum Beispiel def333
ändert dir/file
aber es gibt keine Änderungen an dir/file
zwischen abc000
und def555
(beispielsweise die Veränderung der def333
wird durch etwas auf dem Weg aufgehoben) nicht dir/file
dort überhaupt sehen könnte.
Im Allgemeinen aber in def333
vorgenommenen Änderungen dir/file
in einer Art und Weise verändert haben, die bis zeigt, wenn in abc000
gegen die in def555
die Version zu vergleichen. So werden Sie wahrscheinlich diese Änderung sehen.
Der einfachste Weg, um ein Diff zu erhalten, das zeigt "wie def555
würde aussehen, wenn def333
wurden zurückgesetzt" ist genau das: Erstellen Sie einen Baum (auf einem temporären Zweig) mit der Änderung zurückgesetzt. Um es zu tun mit einem tatsächlichen Namen Zweig, könnten Sie so etwas tun:
git checkout def555 # by ID, so that you get a "detached HEAD"
git checkout -b temp-branch
git revert --no-edit def333
git diff [options] abc000
git checkout somebranch; git branch -D temp-branch
Was passiert, wenn Sie nicht über einen temporären Zweig wollen? Nun, das ist trivial: Erschaffe einfach keinen. Holen Sie sich eine „frei stehende HEAD“ wie oben, führen Sie den Revert, wie oben, und dann git checkout somebranch
. Es gibt keinen temporären Zweig zu löschen, mit Ausnahme der namentlich nicht eine, die git warnt, dass Sie hinter verlassen ... was genau das, was Sie wollten.
Sie könnten auch 'revert --no-commit' verwenden, dann würden Sie überhaupt keine Verzweigung (oder gelösten Kopf) benötigen und nichts zurücklassen. – Bergi
@Bergi: true (obwohl du dann 'git reset --hard' brauchst, um den Arbeitsbaum zu säubern, wenn du fertig bist). – torek