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

时间:2012-01-27 22:53:38

标签: 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

2 个答案:

答案 0 :(得分:34)

假设你还在掌握:

git merge 7c09e17

应该足够了。如果您观看终端,git通常会告诉您提交ID。

答案 1 :(得分:10)

我遇到了类似的问题。我发现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 ec31ccfgit rebase ec31ccf可能有效。 但这主要是在我的案例中合并古代历史(合并冲突等)。

相反,我只想恢复我在ec31ccf上完成的工作,git cherry-pick ec31ccf工作得很好。