我知道如何将分支与主控同步。 我这样做:
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 方面的错误还是我遗漏了什么?
如果 BitBucket 无法为您同步分支,则表明您的分支更改和目标分支存在一些冲突。
您可以使用
git rebase
同步本地分支,然后推送更改。
假设您想与
master
分支同步,您可以执行以下步骤:
首先,更新您本地的
master
分支。
git fetch origin master:master
然后,将您的分支的更改与
master
分支同步
git rebase master
如果您有冲突,您将收到一条消息,其中包含有关冲突的更多信息。进行必要的更改并使用:
git rebase --continue
您可能会收到新的冲突,在这种情况下,请重复之前的操作。如果没有,您可以将更改推送到远程存储库。
因为您使用
git rebase
命令更改了历史记录,所以您需要强制推送。
git push -f
嗯,我认为关于“创建一个分离的 HEAD”的消息有点误导,因为你实际上无法创建它。发生的情况是 git 可以签出分支或修订版(让我们忘记标签,以免事情变得更复杂)。如果您选择签出 local 分支,那么 git 知道当您提交时它必须创建新修订版,然后使本地分支指向刚刚创建的该修订版。但是,如果您选择按 ID 签出“修订版”,而不是按照您发布的示例中提供的方式(或远程分支,就此而言,从本地存储库的角度来看,情况相同),那么就没有指向修订版本的local分支(这就是它被称为detached HEAD的原因)。对于 git 来说没有什么区别。这只是您通过请求本地分支、远程分支或修订版来要求签出的修订版。但是对你来说它有很大的不同,因为如果你正在处理一个分离的HEAD那么,如果你选择提交,git将不会有一个本地分支指向它。它只会创建修订版本,使 HEAD 指向它,仅此而已。例如,如果您此时签出到不同的分支或修订版本,并且没有本地分支指向您刚刚在分离 HEAD 状态下创建的修订版本,那么您将丢失该修订版本(好吧...您始终可以使用git reflog 将其取回,但你明白了,对吧?)。这就是为什么当你开始处理 detached 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 随时创建本地分支