1

我有一个奇怪的 git 场景:我一直在 master 上开发,我注意到当我的 CI 克隆并尝试修改 git 存储库时,它在 refspec 中看不到“master”。因此,命令

git checkout master

失败。为了解决这个问题(因为我需要我的 CI 向 master 提交一些小的更新),我尝试这样做:

git checkout remotes/origin/master

但是,该命令会导致 DETACHED 头。最后的解决方法是,我checkout -b喜欢这样做,而不是结帐:

git checkout -b master

这似乎神奇地“创建”了主分支(我认为已经存在),然后世界上一切都很好。

因此,我的问题是: remotes/origin/master 和通过创建的 master 有什么区别git checkout -b?由于我只有一个遥控器,我认为它们是同义词。

4

1 回答 1

4

remotes/origin/master只是一个远程跟踪分支,它跟踪master远程分支上的哪个提交origin。创建的分支git checkout -b <branch>本地分支,而不是远程跟踪分支。这就是区别。

但是,当您克隆存储库时,通常会创建一个本地master分支,因为这通常是原始存储库的标准默认分支,除非原始存储库设置为使用不同的分支名称作为默认分支。也许这就是您能够在master本地重新创建分支的原因?您可以通过运行以下命令进行检查:

$ git branch -r
  origin/HEAD -> origin/master
  origin/master

在此输出中,您将看到origin/HEAD代表远程默认分支的 指向origin/master

另外,你的 CI 是否真的重复地重新克隆了整个 repo?这似乎真的很低效。我认为大多数 CI 设置只会克隆一次 repo,然后提取或接收新的更改。

于 2014-03-18T22:51:20.400 回答