我已经阅读了关于push命令的git man,但我仍然不明白 push中设置的 current 和 upstream 之间的确切区别.DEFAULT
我希望我们的团队能够进行推送,并且只会推动他们当前正在处理的分支上的更改。 据我所知,当我做 git branch 时,这个分支是用*(星号)标记的分支。
感谢您提供帮助。
答案 0 :(得分:46)
问题是你在推什么,而到哪里:
current
:
<强> upstream
强>:
作为explained here,Git2.0还会为push.default
引入新的默认值: simple
simple
与 upstream
类似,但上游必须具有相同的名称,否则推送将失败。
只推送一个分支(模式为“simple
”,“current
”或“upstream
”)可以避免the scenario推送所有匹配的分支(模式“ matching
“,这是很长时间的默认值”,即使你的某些分支可能还没有准备好被推送。
(master)> git push
...
To git@github.com:jkubicek/my_proj.git
21b430d..dd378ca master -> master
! [rejected] release -> release (non-fast-forward)
error: failed to push some refs to 'git@github.com:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart.
hint: If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.
两者之间的区别(current
和upstream
)位于拉(从遥控器拉到你的分支的什么?):
推送“current
”并不意味着您当前的分支B
有remote/B
有其上游分支。
即:当你推动“branch.B.merge
”分支时,current
未设置
即:当拉到B
时,git将不知道要拉什么分支。
推送“upstream
”表示您当前的分支B
已remote/B
有其上游分支。
即:当你推动“branch.B.merge
”分支时,设置upstream
。
即:当拉到B
时,git知道要拉的分支(以及哪个远程仓库:branch.B.remote
)
答案 1 :(得分:2)
push.default
最好在git config(man git config
)的手册页中介绍。
要理解push.default
的“上游”和“当前”之间的区别,您应该知道上游一词:
Upstream是从普通本地分支到本地远程跟踪分支的本地指针。 (是的,这些都是本地的。)例子:
请注意, origin / * 分支是本地的,并且在每次从原点获取时(重新)设置。这些被称为“本地远程跟踪分支”。它们代表最后一次获取时远程“origin”上分支的状态。
每个(普通)本地分支都可以配置上游,但这不是必须的:上游关系的配置只是为了方便某些git命令!
例如,如果您执行git status
,git会告诉您“如果它知道上游,那么x提交在后面/前面”(因此git可以与之比较)。
正常的初始git checkout blabla
通常为您设置上游配置(如果origin / blabla存在,则检出并设置为上游 - 否则结帐失败)。
git push
也可以使用分支的上游配置,即将新提交复制到代表上游的远程分支。 (这是push.default = upstream
。)
push.default = current
允许git push
将新提交复制到同名的远程。它完全忽略了上游配置。 - 如果您的本地分支名称始终与远程分支名称相同,则两个配置都具有相同的效果,但git push
push.default = upstream
*
将失败,如果尚未配置上游。
PD:是的,git branch
输出中的{{1}}显示当前分支。