我已经阅读了关于 push 命令的 git man,但我仍然不明白要在push.default中设置的current和upstream之间的确切区别
我希望我们的团队只进行推送,并且只推送他们当前正在处理的分支上的更改。据我了解,这个分支是我做git branch时用 * (星号)标记的分支。
感谢您的帮助。
我已经阅读了关于 push 命令的 git man,但我仍然不明白要在push.default中设置的current和upstream之间的确切区别
我希望我们的团队只进行推送,并且只推送他们当前正在处理的分支上的更改。据我了解,这个分支是我做git branch时用 * (星号)标记的分支。
感谢您的帮助。
问题是你在推动什么,以及在哪里:
current
:
upstream
:
正如这里所解释的,Git2.0 将另外引入一个新的默认值push.default
:simple
simple
就像upstream
,但上游也必须具有相同的名称,否则推送将失败。
只推送一个分支(使用模式“ simple
”、“ current
”或“ upstream
”)避免了所有匹配的分支都被推送的情况(模式“ 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
)之间的区别在于拉取(从远程拉取什么到您的分支?):
push " current
" 并不意味着你当前的分支B
有remote/B
它的上游分支。
即:branch.B.merge
未设置,当您推动“ current
”分支时。
即:当拉到 时B
,git 不知道要拉哪个分支。
push " upstream
" 表示你当前的分支B
有remote/B
它的上游分支。
即:branch.B.merge
设置,当你推“ upstream
”分支。
即:当拉到 时B
,git 知道要拉哪个分支(以及哪个远程仓库branch.B.remote
:)
push.default
最好在 git config ( man git-config
) 的手册页中介绍。
要了解 的“上游”和“当前”之间的区别push.default
,您应该知道术语上游:
Upstream 是从普通本地分支到本地远程跟踪分支的本地指针。(是的,这些都是本地的。)示例:
请注意,origin/*分支是本地的,并且在每次从源获取时(重新)设置。这些被称为“本地远程跟踪分支”。它们代表上次获取时远程“原点”上的分支状态。
每个(普通)本地分支都可以配置一个上游,但这不是必须的:上游关系的配置只是为了方便一些 git 命令!
例如,如果你做一个git status
例子,如果 git 知道上游,它会告诉你“x commits behind/ahead”(所以 git 可以与它进行比较)。
正常的初始git checkout blabla
通常会为您设置上游配置(如果 origin/blabla 存在,则将其检出并设置为上游 - 否则检出失败)。
git push
还可以使用分支的上游配置,即将您的新提交复制到代表上游的远程分支。(这是push.default = upstream
。)
push.default = current
允许以相同的名称git push
将新提交复制到远程。它完全忽略了上游配置。– 如果您的本地分支名称始终与远程分支名称相同,则两种配置具有相同的效果,但如果尚未配置上游,则with将失败。git push
push.default = upstream
PD:是的,*
在输出中git branch
显示了当前分支。