我有一个奇怪的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与通过git checkout -b
创建的master之间有什么区别?由于我只有一个遥控器,我认为它们是同义词。
答案 0 :(得分:4)
remotes/origin/master
只是一个远程跟踪分支,它跟踪远程master
上的origin
分支所在的提交。使用git checkout -b <branch>
创建的分支是 本地 分支,而不是远程跟踪分支。差别就是这样。
但是,当您克隆repo时,通常会创建本地master
,因为它通常是原始repo的标准默认分支,除非原始repo设置为使用不同的分支名称作为默认。也许这就是为什么你能够在本地重新创建master
分支的原因?您可以通过运行以下命令来检查:
$ git branch -r
origin/HEAD -> origin/master
origin/master
在此输出中,您会看到origin/HEAD
(代表遥控器上的默认分支)指向origin/master
。
另外,您的CI实际上是否反复重新克隆整个回购?这看起来效率很低。我认为大多数CI设置只会克隆一次repo,然后拉或接收新的更改。