Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/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_Github_Version Control - Fatal编程技术网

为什么git签出会创建一个跟踪远程分支的分支?

为什么git签出会创建一个跟踪远程分支的分支?,git,github,version-control,Git,Github,Version Control,我有两个关于远程回购的分支机构——master和development 现在,克隆存储库之后,我在唯一一个名为master的本地分支上。在git checkout开发之后,我得到的信息如下: 分支机构开发设置用于从源位置跟踪远程分支机构的开发。 切换到一个新的分支“开发” 这到底是怎么回事?我没有指定-b标志来创建新的本地分支。如果我改为git checkout adasdasd,我会得到错误:pathspec'asdasdasd'与git已知的任何文件都不匹配。,这是有道理的。但这只是一些默认

我有两个关于远程回购的分支机构——master和development

现在,克隆存储库之后,我在唯一一个名为
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>