Повністю скасувати ребауз


255

Я виконав ребауз так:

git rebase --onto master new_background_processing export_background_processing

Це не зробило те, чого я цього хотів, тому я здійснив скидання:

git reset --hard HEAD@{1}

Я повернув свою гілку до такої, якою вона була, але я отримав це повідомлення, коли вводив статус git:

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

Як я повністю скасую цю базу даних? Не впевнений, що це означає саме по собі.


16
git rebase --abort
Micha Wiedenmann

6
Git 2.12 тепер надає git rebase --quit. Дивіться мою відповідь нижче
VonC

Відповіді:


407

Використовуйте git rebase --abort. З офіційної документації на ядро ​​Linux дляgit rebase :

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

5
У моєму випадку git rebase --abortце не спрацювало, тому що я щось зіпсував. Я тільки отримав наступне повідомлення про помилку: error: could not read '.git/rebase-apply/head-name': directory of file does not exist. git rebase --quit Описано нижче вирішити мою проблему.
Kout

84

Що стосується минулої бази даних, яку ви не зробили належним чином, ви зараз (Git 2.12, Q1 2017) git rebase --quit

Див. Комітет 9512177 (12 листопада 2016 р.) Від Nguyễn Thái Ngọc Duy ( pclouds) . (Об’єднав Хуніо С Хамано - gitster- у комітеті 06cd5a1 , 19 грудня 2016 р.)

rebase: додати --quit до реконструкції очищення, залиште все інше недоторканим

Бувають випадки, коли ви вирішили перервати незавершену базу даних та переходите робити щось інше, але ви " git rebase --abort" забудете зробити це спочатку . Або ребаза триває так довго, що ви про неї забули. На той момент, коли ви зрозумієте, що (наприклад, запустивши іншу ребауз), вже пізно переймати свої кроки. Розчин зазвичай

rm -r .git/<some rebase dir>

і продовжувати своє життя.
Але можуть бути два різних каталоги для <some rebase dir>(і це, очевидно, вимагає певних знань, як працює база даних), і " .git" частина може бути набагато довшою, якщо ви не знаходитесь у топ-режисі чи на пов'язаному робочому віці. І " rm -r" робити це дуже небезпечно .git, помилка там може знищити об'єктну базу даних або інші важливі дані.

Надайте " git rebase --quit" для цього випадку використання, імітуючи прецедент, який є " git cherry-pick --quit".


Перед Git 2.27 (Q2 2020), запис, створений " git merge --autostash" для збереження початкового брудного стану, був відкинутий помилково після " git rebase --quit", який було виправлено.

Див. Команду 9b2df3e (28 квітня 2020 р.) Від Дентона Лю ( Denton-L) .
(Об'єднав Хуніо С Хамано - gitster- у комітеті 3afdeef , 29 квітня 2020 р.)

rebase: Зберегти autostash вступ в stash reflogна--quit

Вийшов із реєстрації: Дентон Лю

У a03b55530a (" merge: learn - опція аутосташ", 2020-04-07, Git v2.27.0 - злиття, зазначене в партії №5 ), --autostashопція була введена для git merge.

(Див. Розділ " Чи можна" git pull"автоматично зберігати та відображати зміни в очікуванні? ")

Зокрема, коли git merge --quitце запускається з наявним записом автозавантаження, він зберігається в рефлекторному сховищі.

Це контрастує з поточною поведінкою того, git rebase --quitде запис автозахисту просто випав із існування.

Прийміть поведінку git merge --quitв git rebase --quitі збережіть запис автозахисту в реєстр скриньки, а не просто видаляючи його.


3
Це дуже корисно для того, щоб уникнути побічного ефекту від скидання робочого каталогу, коли зміни вносяться поверх a git rebase, а не втрачати їх, як я щойно робив: P.
Войовничий шимпанзе

12

Вам пощастило, що ви не доопрацювали ребауз, тож все одно можете зробити git rebase --abort. Якби ви закінчили ребазу (вона переписує історію ), все було б набагато складніше. Подумайте про те, щоб позначити підказки гілок перед тим, як робити потенційно шкідливі операції (зокрема переписування історії), таким чином ви можете перемотатися назад, якщо щось підірветься.


8

Якщо ви "Rebasing" , "вже розпочато перезавантаження" , яке потрібно скасувати , просто прокоментуйте(#) всі комісії, перелічені в редакторі rebase.

В результаті ви отримаєте повідомлення командного рядка

Nothing to do
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.