当Bitbucket失败时手动同步分支

时间:2016-01-11 14:07:19

标签: git

我知道如何将分支与master同步。 我是这样做的:

git checkout target-branch
git merge master
# resolve conflicts if any and commit
git push

我想弄清楚当自动同步由于冲突而失败时BitBucket建议我的内容。 BitBucket建议我:

git checkout 326907c583f7
# Note: This will create a detached head!
git merge remotes/origin/master

创造分离头的重点是什么? 我对我没有意义。 它是Bitbucket方面的错误还是我错过了什么?

2 个答案:

答案 0 :(得分:0)

好吧,我认为关于“创建一个独立的HEAD”的消息有点误导,因为你实际上不能创建它。会发生什么是git可以签出分支或修订(让我们忘记标签,不要让事情变得更复杂)。如果您选择签出本地分支,那么git知道当您提交它时必须创建新修订,然后使本地分支指向刚刚创建的此修订。但是,如果您选择通过其ID来检查“修订版”,而不是在您发布的示例(或远程分支,从本地存储库的角度来看,它是相同的情况)中提供的,那么就没有指向修订版的 local 分支(这就是为什么它被称为分离的HEAD )。对于git来说没什么区别。这只是您要求通过要求本地分支,远程分支或修订来检查的修订。但对你来说它会产生很大的不同,因为如果你正在使用分离的HEAD 那么,如果你选择提交,git将没有指向它的本地分支。它只会创建修订版,让HEAD指向它,就是这样。例如,如果此时检查到不同的分支或修订版,并且没有本地分支指向您刚刚在分离的HEAD状态下创建的修订版,那么您将丢失修订版(嗯...您可以随时使用 git reflog 让它回来,但你得到了重点,对吗?)。这就是当你开始使用分离的HEAD 时git会警告你的原因:

$ git checkout HEAD~2
Note: checking out 'HEAD~2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

注意它是如何通过运行 git checkout -b new-branch-name

告诉您可以随时创建本地分支的

答案 1 :(得分:0)

如果BitBucket无法为您同步分支,则可能与分支更改和目标分支存在一些冲突。

您可以使用git rebase来同步本地分支,然后再推送更改。

假设您要与master分支同步,可以执行以下步骤:

首先,更新您的本地master分支。

git fetch origin master:master

然后,将您的分支更改与master分支

同步
git rebase master

如果有冲突,您将收到一条消息,其中包含有关它们的更多信息。进行必要的更改并使用:

git rebase --continue

在那里您会收到新的冲突,在这种情况下,请重复上一个操作。如果没有,您可以将更改推送到远程存储库。

由于您已使用git rebase命令更改了历史记录,因此需要强制执行推送。

git push -f