Забули "git rebase - продовжувати" та зробили "git". Як виправити?


112

Я передавав код у git, у мене виникли конфлікти злиття. Я вирішив конфлікти і зробив:

git add

У цей момент я забув зробити:

git rebase --continue

Я продовжив кодування і зробив:

git commit

для змін. Зараз я "no branch"вже не можу:

git rebase --continue 

Як це виправити?


# Зараз немає в жодній галузі. нічого не вчинити (чистий робочий каталог)
— Abhilash

Відповіді:


5

РЕДАКТУВАННЯ : Подивіться також на відповідь нижче, щоб побачити, чи це простіше рішення для вас. https://stackoverflow.com/a/12163247/493106


Мені довелося б спробувати це, але я думаю, що це я зробив би:

  1. Позначте останню комісію (або просто запишіть її десь SHA1, щоб не втратити): git tag temp
  2. git rebase --abort
  3. Зробіть ребауз ще раз. Вам доведеться знову вирішити об'єднання. :(
  4. git rebase --continue
  5. git cherry-pick temp

Проблема в цьому полягає в тому, що ваш tempкомітет, ймовірно, містить як дозвіл злиття, так і новий код. Так це може бути складним, але я б спробував це і побачив, чи працює він.


Ви можете позначити тег, як каже @MatrixFrog, або можете зберегти його як патч. Потім зробіть ребауз аборту. Перевірте стан, щоб переконатися, що РЕПО перебуває у стані, за яким ви знаєте, що не було проблем, а потім запустіть завантаження та перезавантаження.
— yasouser

17
Не робіть цього. Дивіться відповідь kirikaza нижче для набагато простішого / чистішого способу. Не возиться з вишневим вибором та вирішенням конфліктів вдруге.
— tandrewnichols

4
@Abhilash Будь ласка, прийміть відповідь kirikaza. Я (як і tandrewnichols) зробив це, і був набагато простіший спосіб (і Інтернет, здається, погоджувався, оскільки ця відповідь має 4 рази нагороди).
— Девід Дорія

Зараз це 10-кратне оновлення ... також використовуйте git rerere, щоб запам'ятати свої конфліктні рішення (корисно, якщо ви іноді не приймаєте погані рішення, які не хочете, щоб вони запам'ятовували).
— Аякс

216

Просто роби git reset --soft HEAD^. Він переміщує вказівник HEAD до його батьківського, але зберігає дерево роботи та додає зміну об’єднання до індексу. Таким чином, ви можете продовжувати оприлюднення, git rebase --continueяк і раніше.


1
Це повністю спрацювало, і вперше я знайшов застосування для --soft. Приємно знати, як це працює, дякую!
— mmocny

1
Я сподіваюся, що люди побачать усі голоси на цю відповідь і дотримуються запропонованих тут!
— Рагу

1
Це саме те, що я думав (але, можливо, пройшло важко випадково). Не був впевнений, чи HEAD оновлювався під час оновлення. Дякую за підтвердження! Тож радий, що я прокрутив трохи далі, перш ніж возитися з головним болем вище.
— DeezCashews

Я відредагував прийняту відповідь, щоб покласти тут посилання - я не бачив цієї відповіді, поки не дотримувався вказівок вище.
— xaxxon

0

У мене виникла та ж проблема, і що ще гірше, я звільнив три коміти, і після вирішення конфліктів на другому комітті я "здійснив" замість "rebase - продовжувати".

Як результат, у мене виник цей рефлог

Коли я застосував рішення kirikaza, я просто відмінив третє, а не друге, що було проблематично ..

Як бачимо, ребаза починається з каси з відділення віддалених / вихідних / головних, а потім застосовує три мої коміти, які відображаються як три попередні операції (перед оформленням замовлення) у рефлогу.

Потім, якщо ви хочете перезапустити з чистої бази, перед початком відновлення, ви можете просто скинути жорсткий хеш безпосередньо перед оформленням операції ребазування. У моєму випадку (див. Малюнок):

git reset --hard 859ed3c

Тоді можна починати нове git rebase.


0

У мене було відновлено git, виправлені конфлікти, додано файл git із конфліктами та (помилково) здійснено.

Я спробував git reset --soft HEAD^і запропоновані git reset --hardрішення, але жодне не працювало для мене.

Однак якраз git rebase --abortпрацював: це повернуло мене до початку ребазування з чистим робочим деревом.

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