我希望我们的团队只进行推送(push),并且只会推送他们正在工作的分支上所做的更改。 据我理解,这个分支是当我执行git branch命令时,标有*(星号)的那个分支。
谢谢您的帮助。
问题是你正在推送{what},以及{to where}:
current
:
upstream
:
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.
push.default
最好在git config的man页面中进行了解(man git-config
)。
要了解push.default
中“upstream”和“current”的区别,您应该了解术语“upstream”:
Upstream是普通本地分支到本地远程跟踪分支的本地指针。(是的,这些都是本地的。)例如:
请注意,origin/*分支是本地的,并且在每次从原始位置获取时重新设置。这些称为“本地远程跟踪分支”。它们表示“origin”上一次获取时分支的状态。
每个(普通的)本地分支都可以配置一个上游,但这不是必须的:配置上游关系只是方便某些git命令的使用!
例如,如果执行了git status
,git会告诉您“x个提交在上游/之前”,如果它知道上游(因此git可以与其进行比较)。
通常,正常的初始git checkout blabla
会为您设置上游配置(如果存在origin/blabla,则将其检出并设置为上游-否则检查失败)。
git push
也可以使用分支的上游配置,即将新提交内容复制到表示上游的远程分支。(这是push.default = upstream
。)
push.default = current
让git push
将新提交的内容复制到相同名称的远程分支下。它完全忽略上游配置。- 如果您的本地分支名称始终与远程分支名称相同,则两个配置具有相同的效果,除非使用push.default =upstream
的git push
将失败,如果尚未配置上游。
PD:是的,在git branch
的输出中*
显示当前分支。
man git config
打开。你使用的是什么系统? - Robert Siemer
push.default
对pull
没有影响!正确的说法是,上游分支的配置会影响拉取的内容。但两者(上游和 push.default)是完全不同的东西。 - Robert Siemer