Całkowicie anuluj rebase

255

Wykonałem taki rebase:

git rebase --onto master new_background_processing export_background_processing

Nie zrobiłem tego, co chciałem, więc wykonałem reset:

git reset --hard HEAD@{1}

Przywróciłem swój oddział do stanu, w którym był, ale otrzymałem ten komunikat, gdy wpisuję status git:

# You are currently rebasing branch 'export_background_processing' on 'e378641'.

Jak całkowicie anulować tę bazę? Nie jestem pewien, co to oznacza per se.

Graham Jackson
źródło
16
git rebase --abort
Micha Wiedenmann
6
Git 2.12 zapewnia teraz git rebase --quit. Zobacz moją odpowiedź poniżej
VonC

Odpowiedzi:

407

Zastosowanie git rebase --abort. Z oficjalnej dokumentacji jądra Linux dlagit rebase :

git rebase --continue | --skip | --abort | --edit-todo

źródło
5
W moim przypadku git rebase --abortnie zadziałało, bo coś pomieszałem. Mam tylko następujący błąd: error: could not read '.git/rebase-apply/head-name': directory of file does not exist. git rebase --quit Opisane poniżej rozwiązać mój problem.
Kout
84

W przypadku wcześniejszej bazy, której nie przerwałeś poprawnie, teraz (Git 2.12, Q1 2017) masz git rebase --quit

Zobacz commit 9512177 (12 listopada 2016) autor: Nguyễn Thái Ngọc Duy ( pclouds) . (Połączone przez Junio ​​C Hamano - gitster- w commit 06cd5a1 , 19 grudnia 2016)

rebase: dodaj --quitdo bazy czyszczenia, pozostaw wszystko inne nietknięte

Są sytuacje, w których decydujesz się przerwać trwającą bazę i przejść do zrobienia czegoś innego, ale najpierw zapominasz zrobić „ git rebase --abort . Albo rebase trwa już tak długo, że o tym zapomniałeś. Zanim zdasz sobie sprawę, że (np. Uruchamiając inną bazę) jest już za późno, aby odtworzyć twoje kroki. Rozwiązanie jest normalne

rm -r .git/<some rebase dir>

i kontynuuj swoje życie.
Ale mogą istnieć dwa różne katalogi dla <some rebase dir>(i oczywiście wymaga to pewnej wiedzy o tym, jak działa rebase), a " .git" część może być znacznie dłuższa, jeśli nie jesteś w top-reir lub w połączonym drzewie roboczym. A „ rm -r” jest bardzo niebezpieczne .git, błąd może zniszczyć bazę danych obiektów lub inne ważne dane.

Podaj „ git rebase --quit” w tym przypadku użycia, naśladując precedens „ git cherry-pick --quit”.


Przed Git 2.27 (Q2 2020) wpis skrytki utworzony przez „ git merge --autostash” w celu utrzymania początkowego stanu nieczystości został odrzucony przez pomyłkę po „ git rebase --quit”, co zostało poprawione.

Zobacz zatwierdzenie 9b2df3e (28 kwietnia 2020 r.) Przez Denton Liu ( Denton-L) .
(Połączone przez Junio ​​C. Hamano - gitster- w comm 3afdeef , 29 kwietnia 2020)

rebase: zapisz wpis autostash stash reflogna--quit

Podpisano: Denton Liu

W a03b55530a („ merge: uczysz - opcja autostash”, 2020-04-07, Git v2.27.0 - scalanie wymienione w partii nr 5 ), --autostashopcja została wprowadzona dla git merge.

(Zobacz „ Czy„ git pull”może automatycznie ukrywać i usuwać oczekujące zmiany? ”)

W szczególności, gdy git merge --quitjest uruchamiany z obecnym wpisem automatycznego zatrzymania, jest zapisywany w dzienniku zapasów skrytki.

Kontrastuje to z obecnym zachowaniem polegającym na git rebase --quittym, że wpis automatycznego zatrzymania po prostu po prostu przestaje istnieć.

Przyjąć zachowanie git merge --quitsię git rebase --quiti zapisz wpis autostash do reflog stash zamiast po prostu usunąć.

VonC
źródło
3
Jest to bardzo przydatne, aby uniknąć efektu ubocznego resetowania katalogu roboczego, gdy zmiany są wprowadzane nad git rebase, zamiast tracić je tak jak właśnie to zrobiłem: P.
Warlike Chimpanzee
12

Masz szczęście, że nie ukończyłeś bazy, więc możesz to zrobić git rebase --abort. Gdybyś ukończył rebase ( przepisuje historię ), sprawy byłyby znacznie bardziej skomplikowane. Zastanów się nad oznaczeniem końców gałęzi przed wykonaniem potencjalnie szkodliwych operacji (szczególnie przepisywania historii), aby w ten sposób przewinąć, jeśli coś wybuchnie.

vonbrand
źródło
8

Jeśli jesteś „Rebasing” , „Już uruchomiłeś rebase”, który chcesz anulować , po prostu skomentuj (#)wszystkie zatwierdzenia wymienione w edytorze rebase.

W rezultacie otrzymasz wiadomość z wiersza poleceń

Nothing to do
Almas Adilbek
źródło