使用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 (which does complete because there was some error due to the fact that I'm no more on master)

因为它告诉我,当我处于超然的头脑状态时,我仍然可以做出承诺,我这样做了。 但现在我想合并分离的head分支和本地master分支,然后将我的一堆更改推到origin/master。

所以我的问题是我如何将主分支与我的实际状态(分离头)合并


当前回答

或者,您可以在分支上选择commit-id。

<commit-id>在分离head状态

Git checkout master

Git cherry-pick <commit-id>

没有临时分支,没有合并。

其他回答

一个简单的解决方法是为该提交创建一个新的分支并向其签出:git checkout -b <branch-name> <commit-hash>。

这样,您所做的所有更改都将保存在该分支中。如果你需要从剩余的提交中清理你的主分支,一定要运行git reset—hard master。

有了这些,你将重写你的分支,所以确保这些更改不会打扰任何人。一定要看一下这篇文章,以更好地说明分离HEAD状态。

这就是我所做的:

基本上,可以将分离的HEAD看作一个没有名称的新分支。你可以像其他分支一样提交到这个分支。一旦你完成了提交,你想把它推到遥控器。

因此,您需要做的第一件事是为这个分离的HEAD命名。你可以很容易地做到这一点,就像在这个分离的头部:

git checkout -b some-new-branch

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

在我的例子中,我还想快进这个分支,并在分离的HEAD(现在是某个新分支)中进行提交。我所做的就是:

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 the current state of master to my changes

当然,我后来把它合并了才掌握。

差不多就是这样。

也许不是最好的解决方案,(将重写历史),但你也可以做git重置——hard <散列的分离头提交>。

在分离HEAD的情况下,除了没有更新已命名的分支外,提交工作正常。要用已提交的更改更新主分支,在您所在的位置创建一个临时分支(这样临时分支将拥有您在分离HEAD中所做的所有已提交的更改),然后切换到主分支并将临时分支与主分支合并。

git branch  temp
git checkout master
git merge temp

你可以这样做。

# 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 temporary branch
git branch -d tmp

更简单的是

git checkout master
git merge HEAD@{1}

但这有一个轻微的危险,如果您犯了一个错误,恢复在分离头上所做的提交可能会有点困难。