Подтвердить что ты не робот

Как восстановить фиксацию из состояния "отдельное состояние головы"?

Я проверил другую ветку с обновлениями, затем сделал несколько изменений, переключился на главный git, и теперь изменения исчезли! Могу ли я вернуть их? терминал был в основном:

$ git commit
[detached HEAD 7c09e17] Fixed some stuff
  files changed, insertions(+), deletions(-)
$ git push master
fatal: 'master' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
$ git checkout master
Previous HEAD position was 7c09e17... Fixed some stuff
Switched to branch 'master'
$ git merge theother/directory
4b9b3361

Ответ 1

Предполагая, что вы все еще на хозяине:

git merge 7c09e17

должно быть достаточно. git обычно хорошо сообщает вам идентификаторы фиксации, если вы смотрите терминал.

Ответ 2

У меня была аналогичная проблема. Я нашел git reflog для спасения жизни. В случае, если это помогает проиллюстрировать его использование, здесь вывод:

e3191c5 [email protected]{0}: checkout: moving from ec31ccf0735240d0cdc5a44fd443039c3caa43f0 to master
ec31ccf [email protected]{1}: commit: Added code and data for simulation.
781b9ee [email protected]{2}: checkout: moving from 3bd804e635b913840c71b7f8a33665460580d45f to 781b
3bd804e [email protected]{3}: checkout: moving from master to 3bd804

Моя ситуация была немного иной, поскольку я совершил фиксацию, находясь в отдельном состоянии HEAD, начиная с очень старой фиксации.

Если бы я просто хотел объединить ec31ccf0735240d0cdc5a44fd443039c3caa43f0 (aka ec31ccf, где я был) в master, я думаю, что git merge ec31ccf или git rebase ec31ccf могли бы сработать. Но это будет главным образом слияние древней истории в моем случае (с конфликтами слияния и т.д.).

Вместо этого я просто хотел восстановить то, что я сделал на ec31ccf, и git cherry-pick ec31ccf работал красиво.