为什么git签出会创建一个跟踪远程分支的分支?
我有两个关于远程回购的分支机构——master和development 现在,克隆存储库之后,我在唯一一个名为为什么git签出会创建一个跟踪远程分支的分支?,git,github,version-control,Git,Github,Version Control,我有两个关于远程回购的分支机构——master和development 现在,克隆存储库之后,我在唯一一个名为master的本地分支上。在git checkout开发之后,我得到的信息如下: 分支机构开发设置用于从源位置跟踪远程分支机构的开发。 切换到一个新的分支“开发” 这到底是怎么回事?我没有指定-b标志来创建新的本地分支。如果我改为git checkout adasdasd,我会得到错误:pathspec'asdasdasd'与git已知的任何文件都不匹配。,这是有道理的。但这只是一些默认
master
的本地分支上。在git checkout开发之后
,我得到的信息如下:
分支机构开发设置用于从源位置跟踪远程分支机构的开发。
切换到一个新的分支“开发”
这到底是怎么回事?我没有指定-b
标志来创建新的本地分支。如果我改为git checkout adasdasd
,我会得到错误:pathspec'asdasdasd'与git已知的任何文件都不匹配。
,这是有道理的。但这只是一些默认的git行为(如果签出中指定的名称与远程分支匹配,则创建本地分支)吗
简言之,它看起来像是第一次运行的
git checkout development
,实际上执行了git checkout-b development origin/development
,这意味着克隆的存储库在远程(GitHub)上有development
分支
克隆它时,所有远程分支也被克隆。这就是为什么git签出开发
起作用(打开development
分支)
如果您发现这是意外情况,可以从远程删除:
git push origin --delete development
要在远程主机上推送分支,请执行以下操作(当您在GitHub上推送分支时,可能会执行此操作):
是的,如果签出作为远程分支存在的分支,则它假定您要创建跟踪远程分支的分支 从文档中: 如果找不到,但在一个具有匹配名称的远程(调用它)中确实存在跟踪分支,则将其视为等效于
$git checkout-b--跟踪/
这显然在很多时候非常有用——这通常是人们想要做的。如果您希望分支基于当前分支,而不是同名的远程跟踪分支,或者存在名称冲突,那么这很烦人
如果您执行git checkout-bfoo
。注意,如果您还没有名为foo
的分支,这就是您想要的。但是当我再次执行git checkout master
和git checkout development
时,我这次收到的消息是切换到分支开发。所以这不仅仅是切换到现有分支,对吗?简而言之,它看起来像是第一次运行的git checkout development
,实际上执行了git checkout-b development origin/development
。为什么您希望本地分支与远程分支同名,但不跟踪远程分支?当您使用像git
这样的版本控制系统时,已经有很多潜在的混淆,为什么要创建更多呢?@Caleb因为远程分支被称为开发
——一个可能很难避免使用的名称?请记住,在几个远程设备上可能有数百个分支,它们的名称可能是其他人希望在本地使用的。
git push origin development
# or
git push --all # this will push all your branches
$ git checkout -b <branch> --track <remote>/<branch>