0

我有一个带有两个遥控器的 git repo。

    origin/master        cm/master
         |                  |
         |                  |
       sfcc--------------cm/sfcc-18
         |
         |
       feature

以上是我的repo的基本结构。分支 sfcc 是从 cm 的另一个分支 sfcc 中提取的。

分支 sfcc 和功能也被推送到远程源。

分支 sfcc 尚未合并到源/主。

现在我在本地分支功能上。除了创建这些分支之外,我还没有做任何更改。我尝试切换到 origin/sfcc,这让我处于分离状态。

HEAD 现在位于 9d4f1707 将https://github.com/bla-bla-cm的分支 'sfcc-18' 合并到 sfcc 中。

再次,当我尝试结帐来源/迁移时,我收到相同的消息。

git status我得到工作树干净并且没有任何承诺。

即使什么都没有改变,为什么我会陷入这种情况?

如果在 cm/sfcc-18 上发生了一些变化,我不希望它被跟踪关于 cm repo 的变化。我已经使用 origin/master 设置了 origin/sfcc 的上游跟踪。

我也无法结帐来源/主人。我收到以下消息

以前的 HEAD 位置是 9d4f1707 将https://github.com/bla-bla-cm的分支 'sfcc-18' 合并到 sfcc

HEAD 现在位于 e71242f0 .gitignore 使用 Bitbucket 在线创建

4

1 回答 1

3

您看到结帐导致头分离的最可能原因是您正在引用要签出的分支origin/<branch-name>而不是简单的<branch-name>.

虽然从技术上讲,两者都会导致 HEAD 处于相同的提交状态,但 Git 在这两种情况下的行为方式是不同的。

git checkout origin/<branch>检出一个特定的提交作为一个分离的头,即使你有一个同名的本地分支,就像你使用过--detach

git checkout <branch>将检查本地分支(如果存在)。如果没有,并且使用该名称的单个远程跟踪分支确实存在,它将创建一个具有该名称的本地分支并将其设置为跟踪远程分支。有关更多信息,请参阅git checkout

在您的情况下,您应该可以只键入git checkout sfcc-18,并且将签出一个新的本地分支,该分支将跟踪cm/sfcc-18

但是请注意,如果您想将 origin 的 master 签出为新的本地分支,则需要git checkout -b master --track origin/master

于 2018-03-27T09:39:15.537 回答