2011-10-28 5 views
8

Dwa razy popełniłem błąd. Jak przywrócić dwa zatwierdzenia i zatwierdzić tylko dobre rzeczy?Jak przywrócić dwa potwierdzenia i zatwierdzić tylko dobre rzeczy?

+0

Co to jest dobre rzeczy? Czy mógłbyś bardziej szczegółowo opisać, jak wygląda twoja historia i jak ma wyglądać? – svick

+0

trochę więcej szczegółów pomogłoby w uzyskaniu poprawnej odpowiedzi (dobre rzeczy?) – ryanzec

+0

Usuń wszystkie złe rzeczy zanim zatwierdzisz wszystko inne. –

Odpowiedz

11

Możesz zrobić git rebase -i HEAD~2, a następnie użyć interfejsu, aby odrzucić "złe zatwierdzenia", które są tam od tego czasu i wyczyścić historię. To jednak zmienia historię projektu i jeśli już pchnąłeś (i inne pociągnęły) twoje zmiany, są pewne kwestie społeczne do rozwiązania.

Innymi opcjami są git revert te zmiany. Następnie do historii zostaną dodane 2 nowe zatwierdzenia, co sprawia, że ​​nie chcesz, aby te dwa zatwierdzenia były jawne w historii projektu. Mniej czysty, ale łatwiejszy w obsłudze.

+0

Moi współpracownicy będą narzekać, że złe zatwierdzenie było tam na samym początku. Lepiej się go pozbyć, zanim spróbujesz scalić gałąź. Dzięki za podanie odpowiedzi 'git rebase -i', a nie tylko" nie chcesz tego robić! " jak wielu ludzi! –

+0

Kolejnym przydatnym poleceniem w tej sytuacji jest 'git push --force', na wypadek, gdybyś już zepchnął złe zatwierdzenie. –

+0

Opcja '--force' jest destrukcyjna. Jeśli ktoś inny wprowadził zmiany na twoich zatwierdzeniach i pchnął je do repozytorium, twoje pchnięcie siłą zniszczy je wszystkie. –

10

Po pierwsze, git reset HEAD~2, aby odrzucić dwa pierwsze zatwierdzenia, pozostawiając drzewo robocze dokładnie takie, jakie jest. Następnie, po prostu stwórz nowy commit z tym, czego potrzebujesz (np. Z git add s, a następnie git commit).

Aby uzyskać szczegółowe informacje na temat często mylącej kombinacji Reset Demystified przez Scott Chacon, git reset.

+1

Zrobiłbym to tylko dlatego, że zatwierdzenia są tylko lokalne, jeśli są publiczne, użyłbym przywrócenia dwóch ostatnich zatwierdzeń. – ryanzec

+0

Tak, zakładałem, że OP nie pchnął niepoprawnych zatwierdzeń w dowolnym miejscu. –

Powiązane problemy