Chcę cofnąć określone zatwierdzenie w git. Niestety, nasza organizacja nadal standardowo używa CVS, więc kiedy ponownie zatwierdzam CVS, wiele zatwierdzeń git jest łączonych w jedno. W tym przypadku chciałbym wyróżnić oryginalne zatwierdzenie git, ale jest to niemożliwe.
Czy istnieje podejście podobne do git add --patch
tego, które pozwoliłoby mi selektywnie edytować różnice, aby zdecydować, które części zatwierdzenia przywrócić?
Odpowiedzi:
Użyj opcji
--no-commit
(-n
), abygit revert
cofnąć zmiany, a następnie użyjgit add --patch
:Uwaga: Pliki, które dodajesz za pomocą git add --patch, to pliki, które chcesz przywrócić, a nie pliki, które chcesz zachować.
źródło
git reset --hard
zatwierdzeniu , aby odrzucić inne zmiany, których nie chciałeś cofnąć.git reset --hard
jest niebezpieczny dla początkujących, ponieważ może utracić pożądane zmiany. Zamiast się przyzwyczaićgit status
, to podpowiada,git checkout -- FILE..
jak bezpiecznie cofnąć rzeczy.git
;git revert
powinien po prostu się--patch
spierać.git revert
służy do cofania całych zatwierdzeń. Możesz użyć,git checkout -p
aby interaktywnie wybrać bity do przywrócenia.commit
najpierw, albostash
potem spróbujrevert
.Z powodzeniem użyłem następujących.
Najpierw przywróć pełne zatwierdzenie (umieszcza je w indeksie), ale nie zatwierdzaj.
Następnie interaktywnie usuń cofnięte DOBRE zmiany z indeksu
Następnie dokonaj odwrócenia różnicy złych zmian
Wreszcie cofnięte zmiany DOBRE (które zostały cofnięte za pomocą polecenia resetowania) nadal znajdują się w drzewie roboczym. Trzeba je oczyścić. Jeśli w drzewie roboczym nie pozostały żadne niezatwierdzone zmiany, można to zrobić za pomocą
źródło
reset HEAD .
), ponieważ nie wymaga ostatecznego uporządkowania pracy w reż?reset -p
jest krótsza niżreset HEAD
następujeadd -p
. Ale nadal wymaga czyszczenia, ponieważ „dobre” porcje, które zostały zresetowane, nadal znajdują się w katalogu roboczym po zatwierdzeniu.Osobiście wolę tę wersję, która ponownie wykorzystuje automatycznie wygenerowany komunikat o zatwierdzeniu i daje użytkownikowi możliwość edycji i wstawienia słowa „Częściowo” przed ostatecznym zatwierdzeniem.
źródło
Rozwiązanie:
źródło
Inną alternatywą (jeśli twoja aktualna wersja pliku nie jest zbyt daleko od wersji, którą próbujesz przywrócić) jest pobranie skrótu zatwierdzenia bezpośrednio przed tym, z którego chcesz częściowo przywrócić (z
git log
). Wtedy twoje polecenie staje się:To zmienia pliki w twoim drzewie roboczym, ale nie tworzy żadnych zatwierdzeń, więc jeśli naprawdę zrobisz coś, możesz po prostu zacząć od nowa
git reset --hard -- file/you/want/to/fix.ext
.źródło
Możesz użyć git-revert -n, a następnie add --patch, aby wybrać porcje.
źródło