如何处理一个孤立的头做的承诺
使用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>
。
- 切换git分支没有文件签出
- git:切换分支并忽略没有提交的任何更改
- 为什么Git在运行“git checkout origin / <branch>”后告诉我“目前不在任何分支上”?
- Git:如何更新/签出远程原始主文件中的单个文件?
- git checkout –track origin / branch和git checkout -b branch origin / branch之间的区别
- 如何将Git托pipe项目中的所有本地更改恢复到以前的状态?
- Visual Studio 2015 Git由于有未提交的更改,因此无法进行切换/切换
- 是否可以在同一个项目中同时查看多个git分支?
- 如何将HEAD移回到之前的位置? (分离头)