在Git中分离HEAD并在重新定位时混淆冲突

时间:2015-07-08 13:39:38

标签: git rebase git-rebase merge-conflict-resolution

我有两个新的远程分支签出,一个分支(crm-mania)已经有几个月了,我试图将它重新绑定到主开发分支(master)。所以我有以下内容:

vagrant@localhost /var/www/current (crm-mania)$git branch
* crm-mania
  master

然后我执行以下操作:

    vagrant@localhost /var/www/current (crm-mania)$git checkout master
    Switched to branch 'master'
    vagrant@localhost /var/www/current (master)$git pull
    Already up-to-date.

然后我尝试了rebase,我得到以下内容(以及我已经删除的其他消息):

    vagrant@localhost /var/www/current (master)$git rebase master crm-mania
First, rewinding head to replay your work on top of it...
Applying: CRM-174: Mania Site
Using index info to reconstruct a base tree...
M       app/AppKernel.php
M       app/config/config.yml
M       app/config/routing_crmpicco.yml
<stdin>:107: trailing whitespace.
<?php
<stdin>:108: trailing whitespace.
/**
<stdin>:109: trailing whitespace.
 * @author    CRMPicco <crmpicco@crmpicco.co.uk>
<stdin>:110: trailing whitespace.
 * @date      02/04/2015
<stdin>:111: trailing whitespace.
 * @copyright Copyright (c) CRMPicco.
warning: squelched 1022 whitespace errors
warning: 1027 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging app/config/routing_crmpicco.yml
Auto-merging app/config/config.yml
CONFLICT (content): Merge conflict in app/config/config.yml
Auto-merging app/AppKernel.php
Failed to merge in the changes.
Patch failed at 0001 CRM-174: Mania Site
The copy of the patch that failed is found in:
   /var/www/releases/20150708141200/.git/rebase-apply/patch

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

我遇到的主要问题是 HEAD现已分离,例如

vagrant@localhost /var/www/current (HEAD)$git status
# HEAD detached at e90cb5c

我还发现,如果我忽略了这条消息,并试图解决我的冲突,Git正在认识到&#34;冲突&#34;在代码中,我只处理过并且只驻留在我的crm-mania功能分支中。它们绝对不在master分支中。

1 个答案:

答案 0 :(得分:2)

  

我遇到的主要问题是HEAD现已分离

这是预期的行为。 git rebase的工作方式是直接检出目标SHA,它将您置于分离的HEAD中。这恰巧是ourstheirsgit rebase情景中与正常情况相反的原因。

每当您在rebase期间发生合并冲突时,您将始终处于分离的HEAD状态。如果您edit交互式rebase中的任何提交,也会发生这种情况。

至于为什么你会看到意想不到的冲突,如果没有看到两个分支的变更日志就不可能说。通常答案是“其他人修改了代码而我没有意识到”。