Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Git远程/起源/主分支是分离的?_Git_Git Detached Head - Fatal编程技术网

为什么Git远程/起源/主分支是分离的?

为什么Git远程/起源/主分支是分离的?,git,git-detached-head,Git,Git Detached Head,我有一个奇怪的git场景:我一直在master上开发,我注意到当我的CI克隆下来并试图修改git存储库时,它在refspec中看不到“master”。因此,命令 git checkout master 失败了。为了解决这个问题(因为我需要我的CI向master提交一些次要更新),我尝试执行以下操作: git checkout remotes/origin/master 但是,该命令会导致头部分离。最后一个解决方案是,我不进行签出,而是执行checkout-b类似的操作: git checko

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

git checkout master
失败了。为了解决这个问题(因为我需要我的CI向master提交一些次要更新),我尝试执行以下操作:

git checkout remotes/origin/master
但是,该命令会导致头部分离。最后一个解决方案是,我不进行签出,而是执行
checkout-b
类似的操作:

git checkout -b master
它神奇地似乎“创造”了主分支(我认为已经存在),然后世界上一切都好了


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

遥控器/源代码/主代码
只是一个远程跟踪分支,它跟踪远程
源代码
上的
主代码
分支处于启用状态。使用
git checkout-b
创建的分支是本地分支,而不是远程跟踪分支。这就是区别

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

$ git branch -r
  origin/HEAD -> origin/master
  origin/master
在这个输出中,您将看到
origin/HEAD
,它表示远程设备上的默认分支,指向
origin/master


此外,您的CI是否确实重复地重新克隆了整个回购协议?这似乎效率很低。我认为大多数CI设置只需克隆一次repo,然后拉取或接收新的更改。

remotes/origin/master
只是一个远程跟踪分支,它跟踪远程
origin
上的提交
master
分支处于启用状态。使用
git checkout-b
创建的分支是本地分支,而不是远程跟踪分支。这就是区别

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

$ git branch -r
  origin/HEAD -> origin/master
  origin/master
在这个输出中,您将看到
origin/HEAD
,它表示远程设备上的默认分支,指向
origin/master


此外,您的CI是否确实重复地重新克隆了整个回购协议?这似乎效率很低。我认为大多数CI设置只需克隆一次repo,然后拉取或接收新的更改。

谢谢,我每次都将其设置为reclone,只是为了帮助找出问题的原因,但在下一次迭代中,我们希望拉取更改,而不是每次克隆新的repo。谢谢,我每次都将其设置为RECONE,只是为了帮助找出问题的原因,但在下一次迭代中,我们希望进行更改,而不是每次克隆一个新的回购。