Восстановление после неудачной перезагрузки - PullRequest
21 голосов
/ 11 января 2011

Я использую git svn, чтобы получить немного деликатности с svn-сервером, установленным компанией.У меня только что произошла ужасная перебазировка, и я пытаюсь найти лучший способ восстановления.

Вот что произошло:

  1. Для начала яимел это

    ---1 (master)
        \--B--C--D--E (feature/fix-widgets)
    
  2. Итак, я сделал git checkout master, а затем git svn rebase на мастере, чтобы снять эти коммиты. Я не ожидал каких-либо конфликтов между моей ветвью функций и мастеромпотому что изменения были в совершенно другой папке. Поэтому на данный момент, я думаю, у меня есть это:

    ---1--2--3--4 (master)
        \--B--C--D--E (feature/fix-widgets)
    

    Где 1--2--3--4 - это коммиты, извлеченные из SVN.

  3. Далее я делаю git checkout feature/fix-widgets, а затем git rebase master. Сразу же возникает конфликт, и некоторые вещи не складываются, поэтому я решаю уйти и посмотреть на вещи более тщательно. Я делаю git rebase --abort,в надежде, что это восстановит меня там, где я был до ребазинга.

  4. Я делаю git rebase --abort и получаю следующее сообщение

    $ git rebase --abort
      error: git checkout-index: unable to create file somedir/somefile.cs (Permission denied)
      fatal: Could not reset index file to revision 'be44daa05be39f6dd0d602486a598b63b6bd2af7'.
    
  5. Теперь я не уверен, что делать. git status показывает, что я на feature/fix-widgets, но у меня есть целая куча поэтапных изменений и большойколичество неотслеживаемых файлов, которые были ранее зафиксированы.Я был бы в порядке, если бы мог вернуться E.

1 Ответ

27 голосов
/ 11 января 2011

Вы должны взглянуть на ORIG_HEAD

ORIG_HEAD - это предыдущее состояние HEAD, устанавливаемое командами, которые могут иметь опасное поведение, чтобы их было легко вернуть.
Теперь менее полезно использовать Git reflog: HEAD@{1} примерно эквивалентен ORIG_HEAD (HEAD@{1} всегда является последним значением HEAD, ORIG_HEAD является последним значением HEAD перед опасной операцией)

Так что попробуйте это git reset, чтобы вернуться к нему перед любой перебазировкой:

git reset --hard ORIG_HEAD   
...