Я прервался в середине долгого интерактивного процесса перебазирования, так как разрешение конфликта пошло ужасно неправильно.git resume rebase using reflog
Я заметил, что reflog имеет ссылки на каждый раз, когда была зарегистрирована git rebase --continue
d.
Как я могу возобновить восстановление с последнего успешного --continue
так, чтобы сохранились предыдущие разрешения конфликта от rebase? (Если бы я выполнить команду перебазироваться с нуля, я бы вручную разрешить все конфликты, которые я уже разрешённые в первый раз, когда я прошел через него)
Пример:
Пусть интерактивный перебазироваться пошел, как следующим образом (где 000002 проблема была решена успешно и 0000004 был такой полнейшая катастрофа, что перебазироваться была прервана)
edit 000001 Edit to this commit
pick 000002 Easy merge conflict, resolved
pick 000003 Commit 3
pick 000004 Really ugly merge conflict, Abort!
pick 000005 Commit 5
reflog теперь выглядит как этот
[email protected]{0}: rebase: aborting
[email protected]{1}: rebase -i (pick): updating HEAD
[email protected]{2}: rebase -i (pick): updating HEAD
[email protected]{3}: rebase -i (edit): updating HEAD
[email protected]{4}: rebase -i (start): checkout 000000
То, что я хочу сделать, это git reset --hard [email protected]{1}
и продолжить процесс первоначальной перезагрузки, давая «действительно уродливое слияние конфликта» еще одну попытку (и продолжая выбирать 000005).
Предположим, что в прошлом 000005 существует много истории (или будущего?), которая довольно сложна (в том числе объединение происходит из других ветвей и т. д.). Нет ли более простого способа, чем повторять всю последовательность 'git cherry-pick' и' git merge'? – arcyqwerty
Используя подобный подход, если мне еще рано вставать вопрос о rebase, было бы легче создать новую ветку и снова запустить ту же команду rebase, используя 'git checkout' для разрешения слияний на этом пути? Будет ли это создавать какие-нибудь странные истории, указывающие на осиротевшие refase refs? – arcyqwerty
@arcyqwerty: интерактивная перестановка * - это серия черешни. Вот почему слово в директивах - «выбрать». Rebasing обычно удаляет слияния; интерактивная перебаза позволяет вам сохранять их, но метод, которым он это делает, полна волосатых угловых случаев. См. Скрипт rebase, например, 'vim $ (git --exec-path)/git-rebase - interactive'. «Неправильный» метод работает, потому что мы создаем новую ветвь, совет которой является последней фиксацией, сделанной вами перед тем, как отказаться от усилий по переадресации, т. Е. Мы просто наклеиваем ярлык на анонимную ветку до сих пор. – torek