Забыл "git rebase -continue" и сделал "git commit". Как исправить?
Я перебирал код в git, у меня возникли конфликты слияния. Я решил конфликты и сделал:
git add
На данный момент я забыл сделать:
git rebase --continue
Я продолжил кодировать и сделал:
git commit
для изменений. Сейчас я нахожусь на "no branch"
и не могу сделать:
git rebase --continue
Как это исправить?
Ответы
Ответ 1
Изменение: Посмотрите на ответ ниже, чтобы увидеть, является ли это более простым решением для вас. fooobar.com/questions/89871/...
Я должен был бы попробовать это, но я думаю, что это то, что я хотел бы сделать:
- Пометьте свой последний коммит (или просто запишите его SHA1 где-нибудь, чтобы не потерять его):
git tag temp
-
git rebase --abort
- Сделайте ребазинг снова. Вам придется снова разрешить слияние. :(
-
git rebase --continue
-
git cherry-pick temp
Проблема в том, что ваш temp
коммит, вероятно, содержит как разрешение слияния, так и новый код. Так что это может быть сложно, но я бы попробовал и посмотрел, работает ли это.
Ответ 2
Просто сделайте git reset --soft HEAD^
. Он перемещает указатель HEAD на родителя, но сохраняет дерево работы и добавляет слияние в индекс. Таким образом, вы можете продолжить перезагрузку с помощью git rebase --continue
, как и раньше.
Ответ 3
У меня возникла та же проблема, и, что еще хуже, я перебирал три коммита, и после разрешения конфликтов на втором коммите я "зафиксировал" вместо "rebase --continue".
В результате у меня был этот мерзавец reflog
Когда я применил решение kirikaza, я просто отменил третий коммит, а не второй, что было проблематично..
Как вы можете видеть, rebase начинается с извлечения из ветки remotes/origin/master и затем применяет мои три коммита, которые отображаются как три предыдущие операции (перед извлечением) в reflog.
Затем, если вы хотите перезапустить с чистой базы, перед ребазингом вы можете просто сбросить жесткий хеш непосредственно перед проверкой операции ребазирования. В моем случае (см. Рисунок):
git reset --hard 859ed3c
Затем вы можете начать новый git rebase
.