Как восстановить коммит из «отдельного состояния головы»? - PullRequest
21 голосов
/ 28 января 2012

Я проверил другую ветку с обновлениями, затем сделал несколько изменений, переключился обратно на основной 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

Ответы [ 2 ]

35 голосов
/ 28 января 2012

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

git merge 7c09e17

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

11 голосов
/ 14 июля 2016

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...