git for-each-ref:字段名称“upstream”和“push”之间的区别

时间:2017-06-26 15:33:22

标签: git

https://git-scm.com/docs/git-for-each-ref#git-for-each-ref-upstream

  

本地引用的名称,可以在显示的引用中被视为“上游”。尊重:short:lstrip:rstrip的方式与上面的refname相同。另外尊重:track以显示" [提前N,在M后面]"并:trackshort显示简洁版本:">" (提前),"<" (后面),"<>" (前后),或" =" (同步中)。 :track还打印" [已离]"每当遇到未知的上游引用时。附加:track,nobracket以显示没有括号的跟踪信息(即"前面N,后面是M")。如果ref没有与之关联的跟踪信息,则无效。除nobracket之外的所有选项都是互斥的,但如果一起使用,则选择最后一个选项。

https://git-scm.com/docs/git-for-each-ref#git-for-each-ref-push

  

本地参考的名称,代表显示参考的@{push}位置。尊重:short:lstrip:rstrip:track:trackshort选项upstream。如果未配置@{push} ref,则生成空字符串。

任何人都可以用简单的语言解释它的区别是什么吗?

2 个答案:

答案 0 :(得分:1)

可以设置一个分支,以便从一个分支拉出但是推到另一个分支。例如,你可以说

git config remote.origin.push refs/heads/*:refs/heads/dev/*

这不会改变pull掌握时合并的内容(大概是origin/master,它是原始仓库refs/heads/master的远程引用),但当你pushmaster更改将转到原点上的dev/master分支(在获取时,您会看到origin/dev/master)。

如果您以这种方式进行配置,那么upstream就是拉动的来源,push是推送的地方。

答案 1 :(得分:1)

考虑一个存储库,其中设置了分支br1的上游:

$ git config --get branch.br1.remote
origin
$ git config --get branch.br1.merge
refs/heads/br1
$ git config --get-all remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

在这种情况下,分支br1的上游是origin/br1

$ git rev-parse --symbolic-full-name "br1@{upstream}"
refs/remotes/origin/br1

但是假设我们将此分支重命名为br2。它的上游仍为origin/br1。进一步假设push.default设置为simple。在这种情况下,git push将拒绝将br2推送到origin,因为名称不匹配。

此时,br1会向您显示git for-each-refbr2作为其上游,但没有任何推动。

更改origin/br1设置(或设置覆盖全局默认设置的遥控器的默认设置)将更改此设置。

Mark Adelsberger's answer一样,您也可以将推送和提取值设置为两个不同的设置。