如何从'分离头状态'中恢复提交?

NoB*_*ugs 21 git merge

我检查了另一个更新的分支,然后进行了一些更改,切换回主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
Run Code Online (Sandbox Code Playgroud)

Mat*_*hen 36

假设你还在掌握:

git merge 7c09e17
Run Code Online (Sandbox Code Playgroud)

应该够了.git如果你看终端,通常会告诉你提交ID.

  • @NoBugs,如果你想看到所有悬空提交(提交不在分支上),我想你想要`git fsck --unreachable --no-reflogs`. (9认同)
  • 如果您没有观看终端,您可以从git reflog获取所需的信息 (6认同)
  • @MatthewFlaschen我希望我能不止一次地向你投票!这只是救了我的屁股! (2认同)

Ian*_*Gow 11

我遇到了类似的问题.我发现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
Run Code Online (Sandbox Code Playgroud)

我的情况有点不同,因为我从一个非常旧的提交开始在一个独立的HEAD状态下进行了提交.

如果我只是想合并ec31ccf0735240d0cdc5a44fd443039c3caa43f0(也ec31ccf就是我曾经去过的地方)master,我认为git merge ec31ccf或者git rebase ec31ccf可能有效.但这主要是在我的案例中合并古代历史(合并冲突等).

相反,我只是想恢复我所做的ec31ccf,并且git cherry-pick ec31ccf工作得很好.