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 -b
或git 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一个新的分支(以后再合并);