Jak w Git wycofać rebase, jeśli nie jesteś z niego zadowolony?
Git nie ma możliwości uruchomienia na sucho dla rebase. Jeśli zrobiłem rebase i jeszcze go nie pchnąłem, jak mogę cofnąć się do wcześniej, jakby to się nigdy nie wydarzyło?
Jak w Git wycofać rebase, jeśli nie jesteś z niego zadowolony?
Git nie ma możliwości uruchomienia na sucho dla rebase. Jeśli zrobiłem rebase i jeszcze go nie pchnąłem, jak mogę cofnąć się do wcześniej, jakby to się nigdy nie wydarzyło?
Odpowiedzi:
Możesz użyć reflog, aby znaleźć pierwszą akcję przed rozpoczęciem rebase, a następnie zresetować - trudno do niej wrócić. na przykład
$ git reflog
b710729 HEAD@{0}: rebase: some commit
5ad7c1c HEAD@{1}: rebase: another commit
deafcbf HEAD@{2}: checkout: moving from master to my-branch
...
$ git reset HEAD@{2} --hard
Teraz powinieneś wrócić przed rozpoczęciem rebase.
Aby znaleźć właściwe miejsce do zresetowania, wystarczy wybrać wpis znajdujący się najbliżej góry, który nie zaczyna się od „rebase”.
Jeśli rebase jest jedyną rzeczą, którą zrobiłeś na gałęzi, tj. Nie masz niezakończonych zatwierdzeń / zmian - możesz po prostu usunąć lokalną gałąź za pomocą, git branch -Da następnie sprawdzić ją ponownie:
$ git checkout my-branch
$ git rebase master
// not happy with result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch
Lub dla tego samego efektu możesz zresetować - twardo do gałęzi pochodzenia:
$ git reset --hard origin/my-branch
Jeśli zrobiłeś to, gdy miałeś inne niezakończone commity, stracisz je. W takim przypadku po prostu użyj metody reflog powyżej, aby wskoczyć z powrotem do wpisu reflog, w którym dokonałeś zatwierdzeń.
ORIG_HEADoryginalną wartość skrótu gałęzi podlegającej zmianie bazy. Więc zamiast znaleźć numer 2 dla HEAD@{2}, możesz po prostu użyć ORIG_HEAD... ale tylko wtedy, gdy ORIG_HEADnadal jest niezakłócony. Zestaw poleceń Gita ustawia to (rebase, am, reset i merge, w różnych okolicznościach).
Rebase zachowuje kopię zapasową starego stanu jako ORIG_HEAD.
Możesz więc przywrócić ostatnią rebase, uruchamiając:
git reset --hard ORIG_HEAD