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,则生成空字符串。
任何人都可以用简单的语言解释它的区别是什么吗?
答案 0 :(得分:1)
可以设置一个分支,以便从一个分支拉出但是推到另一个分支。例如,你可以说
git config remote.origin.push refs/heads/*:refs/heads/dev/*
这不会改变pull
掌握时合并的内容(大概是origin/master
,它是原始仓库refs/heads/master
的远程引用),但当你push
时master
更改将转到原点上的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-ref
有br2
作为其上游,但没有任何推动。
更改origin/br1
设置(或设置覆盖全局默认设置的遥控器的默认设置)将更改此设置。
与Mark Adelsberger's answer一样,您也可以将推送和提取值设置为两个不同的设置。