Właściwie wszystkiegit diff
s są popełnić-parami: powyższe porównuje drzewa/pliki w abc000
w porównaniu z tymi w def555
. Jeśli na przykład def333
zmienia dir/file
ale istnieją żadne zmiany dir/file
między abc000
i def555
(na przykład zmiana def333
jest anulowana przez coś po drodze), że nie może zobaczyć dir/file
tam w ogóle.
Generalnie jednak zmiany dokonane w def333
będzie zmieniły dir/file
w sposób, który pokazuje się przy porównywaniu wersji w abc000
przeciwko jednej w def555
. Będziesz więc prawdopodobnie zobaczyć tę zmianę.
Najłatwiej dostać Diff, który pokazuje „co def555
będzie wyglądać jeśli def333
zostały przywrócone” jest nie tylko to: tworzenie drzewa (tymczasowo) z oddziału zmiany cofnięte. Aby to zrobić z rzeczywistą nazwaną gałęzią, możesz zrobić coś takiego:
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
Co zrobić, jeśli nie chcesz odgałęzienia temp? To trywialne: po prostu nie rób tego. Zdobądź "odłączoną głowicę" jak powyżej, wykonaj przywrócenie, jak wyżej, a następnie git checkout somebranch
. Nie ma żadnej tymczasowej gałęzi do usunięcia, z wyjątkiem nienazwanego, który git ostrzeże cię, że odchodzisz ... właśnie tego chciałeś.
Możesz także użyć 'revert --no-commit', wtedy nie potrzebujesz wcale gałęzi (lub odłączonej głowy) i niczego nie zostawisz. – Bergi
@Bergi: true (chociaż będziesz musiał "git reset --hard" wyczyścić drzewo robocze po zakończeniu). – torek