如何处理一个孤立的头做的承诺

使用git我做了这样的事情

git clone git checkout {a rev number tree rev before} (here i started to be in a detached head state) //hacking git commit //hacking git commit (some commit where made on origin/master) git pull (wich does complete because there was some error due to the fact that i'm no more on master) 

因为git对我说,我仍然可以在脱离头脑的状态下犯下罪行,所以我这样做了。 但是现在我想合并我分离的头部分支到我的本地主分支,然后把我的改变推到origin / master。

所以我的问题是我怎么能合并主分支与我的实际状态(分离的头)

创build一个分支,然后切换到主并合并它:

 git branch my-temporary-work git checkout master git merge my-temporary-work 

你可以做这样的事情。

 # Create temporary branch for your detached head git branch tmp # Go to master git checkout master # Merge in commits from previously detached head git merge tmp # Delete temproary branch git branch -d tmp 

更简单的是

 git checkout master git merge HEAD@{1} 

但是这有一点小小的危险,就是如果你犯了一个错误,可能会更难以恢复在分离的头上做出的提交。

你可以做git merge <commit-number>或者git cherry-pick <commit> <commit> ...

正如Ryan Stewart所build议的那样,您也可以从当前的HEAD创build一个分支:

 git branch brand-name 

或者只是一个标签:

 git tag tag-name 

这就是我所做的:

基本上,把detached HEAD想象成一个没有名字的新分支。 您可以像任何其他分支一样提交到这个分支。 一旦你完成提交,你想把它推到远程。

所以你需要做的第一件事就是给这个detached HEAD一个名字。 你可以很容易做到这一点,而在这个detached HEAD

 git checkout -b some-new-name 

现在,您可以像其他分支一样将其推送到远程。

在我的情况下,我也想把这个分支快速的转移到我在detached HEAD (现在是some-new-branch )中所做的提交。 我所做的只是

 git checkout master 

git pull # To make sure my local copy of master is up to date

 git checkout some-new-branch 

git merge master // This added current state of master to my changes

当然,我后来把它合并到了master

就是这样。

在HEAD分离的情况下,提交工作正常,除非没有命名分支得到更新。 为了使主分支更新你提交的更改,在你所在的地方build立一个临时分支(这样临时分支将拥有在分离的HEAD中所做的所有提交的更改),然后切换到主分支并将临时分支与大师。

 git branch temp git checkout master git merge temp 

我也build立了一个文章,在那里解释如何处理。 我补充一点,因为它与提出的有点不同。 但是我认为所有的命题都是有效的

http://edspencer.net/2009/10/git-what-to-do-if-you-commit-to-no-branch.html

后来我会接受第一个答案作为好的一个

也许不是最好的解决scheme,(将重写历史),但你也可以做git reset --hard <hash of detached head commit>