2010-03-12 2 views
30

Я просто попытался перестроить очень старую ветку с незначительной модификацией на моего хозяина. Была проблема с объединением только одного из трех задействованных файлов, поэтому я сделал немыслимый -skip, думая, что он просто пропустит этот файл, но, как это случилось, он, кажется, пропустил все мои изменения и перевернулся вперед , Итак, теперь rebase закончен, и мои изменения, похоже, исчезли.Восстановление от непреднамеренного пропуска во время переустановки

Я видел вопрос о undoing rebase, но для меня это все греческий, я вижу reflog, но я не знаю, к какой фиксации прикреплен филиал до переустановки.

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

ответ

35

Во-первых, сделайте архив вашей рабочей папки git. Это позволяет несколько раз попробовать.

Давайте предположим, что произошло следующее

  • мерзавец выезд другой старый Гиса
  • мерзавец перебазироваться хозяину
  • некоторые проблемы (которые вы пропущено)

в данный момент вы сейчас все еще в другой-старой ветке, и ваш рефлог показывает вам:

6f8348f [email protected]{0}: rebase: <commit message of last commit in another-old-branch> 
e547ec0 [email protected]{1}: checkout: moving from another-old-branch to e547ec0d2a558d189464fc57192066b34ec5f28f^0 
65cedf8 [email protected]{2}: checkout: moving from master to another-old-branch 

Представьте, что ветви подобны символическим ссылкам (или указателям), все, что нам нужно сделать, это позволить ветке «другая-старая ветвь» вернуться к старому идентификатору фиксации. старый фиксатор все еще существует, и он не был затронут вашей rebase. вроде: «Эй, мерзавец, другой старый-ветвь e547ec0d2, забыть все остальное, что произошло»

В нашем случае здесь был e547ec0d2a558d189464fc57192066b34ec5f28f, так что мы должны сделать сейчас

  • мерзавец фотографии another- старые ветви # если вы еще не там
  • мерзавца сброса --hard e547ec0d2a558d189464fc57192066b34ec5f28f

теперь ваша ветвь возвращается в нормальное русло. И вы можете повторить свою перезагрузку.

Обратите внимание: ваш рефлок уже немного сложнее, чем пример aboves. но он должен быть где-то там ...

удачи!

+1

Нет, я, должно быть, прикрутил что-то еще, пытаясь восстановиться. Ответ помечен для следующего раза ... – Benjol

+8

+1; Еще один совет: 'git log -g' может быть более удобным способом просмотра reflog. –

+2

Работал как очарование! Просто спас мое утро спасибо – kmanzana

Смежные вопросы