GIT恢复最后分离的HEAD

请在我的项目中遇到一个大问题:这是场景。 我有一个GIT下的Xcode项目。 今天,我意识到最后一次提交会打破一些testing,所以我签出了以前的提交。 我使用SourceTree,这是warnig

这样做会使你的工作副本成为“分离的HEAD”,这意味着你将不再是一个分支。 如果你想在这之后提交,你可能想要再次签出一个分支,或者创build一个新的分支。 这个可以吗?

我工作了一整天,最后我做了一切。 所以我需要合并我的工作在开发分支,所以我结帐开发分支和…我的工作立即消失:(

我知道是错误的分离我的头和Sourcetree警告我…但有一种方法来恢复我的作品?

非常感谢。

如果你inputgit reflog ,它会告诉你HEAD指向什么版本的历史。 你分开的头应该在那里。 一旦你find它,做git checkout -b my-new-branch abc123或者git branch my-new-branch abc123 (其中abc123是detached HEAD的SHA-1)来创build一个指向你分离头的新分支。 现在,您可以在闲暇时合并该分支。

一般来说,如果你在一个分离的头部上工作后检查一个分支,Git应该告诉你已经分离的头部的提交,所以如果你需要,你可以恢复它。 我从来没有使用SourceTree,所以我不知道它是否传递这个消息。 但是,如果它显示了这个消息,那么你应该可以使用它来find提交,并再次使用git checkout -bgit branch分支从该提交创build一个分支。

在Sourcetree中,你可以使用GUI来做到这一点。

首先通过在命令历史logging(查看:显示命令输出)中查找消息来查找“丢失”提交。 在丢失的提交之后,它可能会在命令“切换分支”中。 在这个消息中,希望你会看到提交注释1234567提交ID。

把这个提交ID下一步。

点击顶部工具栏中的“分支”button,你应该得到一个对话框“新分支”,你可以指定一个提交。 把那个提交ID放在那里,指定一个新的分支名称,点击创build分支,你应该得到一个新的分支丢失的提交!

在这里输入图像说明

我试过这种情况,并发现git告诉我最后一次提交的SHA-1:

 vors@localhost:~/git-test$ git checkout master Warning: you are leaving 1 commit behind, not connected to any of your branches: ec600e6 333 If you want to keep them by creating a new branch, this may be a good time to do so with: git branch new_branch_name ec600e6eb2473dd4f3732539c5c1fa5829f631b7 Switched to branch 'master' 

你有没有看到这个消息?

如果你不想保留分离HEAD的变化,并想直接去下面的命令去最新的分支提交使用。

 git checkout - 

注意:我将删除分离的HEAD中的所有更改。

只要你想做出改变,分离的头是好的。

如果你想恢复一个提交,你可以在特定的分支上使用git恢复

如果你想脱离头脑,做承诺; 创build一个新的分支(以后再合并);