Полностью отменить ребаз

256

Я выполнил ребаз, как это:

git rebase --onto master new_background_processing export_background_processing

Это не сделало то, что я хотел, поэтому я выполнил сброс:

git reset --hard HEAD@{1}

Я вернул свою ветку в прежнее состояние, но получил это сообщение, когда набираю git status:

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

Как мне полностью отменить этот ребаз? Не уверен, что это значит само по себе.

Грэм Джексон
источник
16
git rebase --abort
Мика Виденманн
6
Git 2.12 теперь предоставляет git rebase --quit. Смотрите мой ответ ниже
VonC

Ответы:

409

Использование 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 Описано ниже решить мою проблему.
Кут
84

В случае прошлой ребазинга, который вы не сделали должным образом, вы сейчас (Git 2.12, 1 квартал 2017 г.) имеете git rebase --quit

См. Коммит 9512177 (12 ноября 2016 г.) Нгуена Тхаи Нгука Дуй ( pclouds) . (Слиты Junio C Hamano - gitster- в фиксации 06cd5a1 , 19 дек 2016)

rebase: добавь --quitв очистку ребаз, оставь все остальное нетронутым

Бывают случаи, когда вы решаете прервать выполняемую перебазировку и переходить к другим действиям, но сначала вы забыли сделать « git rebase --abort» . Или перебазирование происходило так долго, что вы об этом забыли. К тому времени, когда вы поймете, что (например, запустив еще одну перебазировку) уже слишком поздно пересматривать ваши шаги. Решение обычно

rm -r .git/<some rebase dir>

и продолжай свою жизнь.
Но может быть два разных каталога для <some rebase dir>(и это, очевидно, требует определенных знаний о том, как работает rebase), и .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) .
(Слито Junio C Hamano - gitster- в фиксации 3afdeef , 29 апрелем 2020)

rebase: Сохранить autostash вступление в stash reflogна--quit

Подписано: Дентон Лю

В a03b55530a ( опция " merge: learn --autostash", 2020-04-07, Git v2.27.0 - слияние, перечисленное в пакете № 5 ) эта --autostashопция была введена для git merge.

(См. « Может ли» git pullавтоматически прятать и извлекать ожидающие изменения? »)

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

Это контрастирует с текущим поведением, git rebase --quitкогда запись autostash просто исчезает из существования.

Примите поведение git merge --quitin git rebase --quitи сохраните запись autostash в reflog, а не просто удалите ее.

VonC
источник
3
Это очень полезно для избежания побочного эффекта сброса рабочего каталога при внесении изменений поверх a git rebase, вместо потери их, как я только что сделал: P.
Воинственный шимпанзе
12

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

vonbrand
источник
8

Если вы «Ребазинг» , «Уже начался ребаз», который хотите отменить , просто прокомментируйте(#) все коммиты, перечисленные в редакторе ребаз.

В результате вы получите сообщение командной строки

Nothing to do
Алмас Адильбек
источник