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
Git fetch未按预期工作";:“消失了”;未添加到分支描述中_Git_Github - Fatal编程技术网

Git fetch未按预期工作";:“消失了”;未添加到分支描述中

Git fetch未按预期工作";:“消失了”;未添加到分支描述中,git,github,Git,Github,如果我们执行git-fetch-p或git-fetch--prune它将在远程删除时修剪分支 执行此命令后,如果执行了git branch-vv,则假定显示从远程删除的本地分支的:gone] 在我的情况下,有时它会像预期的那样工作,但并不总是如此。有时它不会将:gone]添加到远程服务器上删除的分支 我的目标是,如果在远程服务器上删除本地分支,则删除分支 我想知道为什么会这样 仅仅因为其他人删除了您名为X的分支而删除您名为X的分支并不一定明智。如果您正在开发一个新功能,您将其命名为专长,而Bob

如果我们执行
git-fetch-p
git-fetch--prune
它将在远程删除时修剪分支

执行此命令后,如果执行了
git branch-vv
,则假定显示从远程删除的本地分支的
:gone]

在我的情况下,有时它会像预期的那样工作,但并不总是如此。有时它不会将
:gone]
添加到远程服务器上删除的分支

我的目标是,如果在远程服务器上删除本地分支,则删除分支

我想知道为什么会这样

仅仅因为其他人删除了您名为X的分支而删除您名为X的分支并不一定明智。如果您正在开发一个新功能,您将其命名为
专长
,而Bob放弃了他称之为
专长的新功能,Bob将删除Bob的
专长
,这并不意味着你应该删除你的
专长

除此之外,让我们看看分支的一个特殊特性。此特殊功能仅适用于(本地)分支,而不适用于
origin/master
,Git的哪些部分称为远程跟踪分支,并在
Git branch-r
输出下列出。1它们实际上有几个特殊功能,例如,您可以使用
Git checkout
“打开”分支,与在after
git checkout master
中一样,
git status
命令将在分支master上显示
。但这不是我这里的特色

我们在这里关心的特点是,它们可以具有上游设置。也就是说,你的
大师可以有一个且只有一个上游,你的
开发
(如果你有
开发
)可以有一个上游,你的
专长
(如果你有)可以有一个上游,依此类推。你在这里的选择是有上游,或没有上游。对于每个分支,每次选择一个分支

要删除分支的上游设置,请使用
git branch--unset upstream name
。名为
name
的分支现在没有上游。如果您省略了
名称
部分,它将应用于当前分支,即您的
所附着的分支。这不是唯一的解决方法,但通常是最好的方法

要设置或更改分支的上游设置,请使用
git branch--set upstream To=upstream name
。名为
name
的分支现在有一个上游分支;上游是您作为
上游
给出的参数。与
--取消上游
一样,省略
名称
表示当前分支(不允许省略
上游
)。同样,这不是设置它的唯一方法,但通常是最好的方法,因为
git branch
命令将在允许您设置它之前验证
upstream
参数是否合理

有时分支具有上游设置,有时则没有。稍后我们将了解时间和原因


1我已经到了尽量避免使用分支这个词来进行远程跟踪的地步。我现在只调用远程跟踪名称,因为它们与本地分支名称非常不同。请注意,
git fetch-p
,或
git remote prune origin
,或将
fetch.prune
设置为
true
,仅影响这些远程跟踪名称


上游到底是什么? 上游只是另一个分支名称,在这里,分支名称指的是本地分支,如
master
develope
,或远程跟踪名称,如
origin/master
。因此,您可以将
develope
的上游设置为
master
,或者设置为
origin/master
,或者设置为
origin/develope
。git分支--set upstream to
操作将允许您设置任何存在的内容,git认为,这些内容在这里是有意义的

Git在这里有一个奇怪的缺陷。这部分是历史性的。在远古的过去,Git没有遥控器,也没有
原点
——因此Git也没有远程跟踪名称,没有
原点
,就不可能有
原点/主机
。但部分原因在于一个简单的事实,即您可能有也可能没有
origin/xyz
origin/xyz
甚至可能在您努力完成
xyz
分支时消失(因为Bob认为您在origin上完成并删除了
xyz

简单地说,缺陷在于,当上游存在时,您设置的上游已经后退,
git branch——将上游设置为
,因此让您设置它可能现在就消失了。当您在
git分支-vv
输出中看到
:gone
时就是这种情况。在过去的某个时候,您告诉您的Git您的分支
xyz
应该将
origin/xyz
作为其上游,并且
origin/xyz
当时就存在。因此,
git branch
验证了一切正常,并进行了设置。但是现在名称不见了,所以设置不再有效,
git branch-vv
注意到了这一点

事实上,分支的上游设置由两个部分组成,您可以使用
git config
配置其中一个或两个部分,甚至可以将您的配置带到所选的编辑器(
git config--edit
)中直接处理它们:

[branch "master"]
        remote = origin
        merge = refs/heads/master
在这个特定的存储库中,此设置表示
master
的上游是
origin/master
。您可能认为您可以从
remote=
行获取
origin
部分,从
merge=
行获取
master
部分,但这是一种陷阱:有一个秘密的复杂映射。查找某个分支的上游设置
$ git rev-parse --symbolic-full-name master@{upstream}
refs/remotes/origin/master
git branch --track newbranch origin/upstreamname
git branch --no-track newbranch origin/upstreamname
git checkout develop