git - 推送电流与推送上游(跟踪)

Eya*_*lan 32 git

我已经阅读了关于push命令的git man,但我仍然不明白在push.default中设置当前上游之间的确切区别

我希望我们的团队能够进行推送,并且只会对他们当前正在处理的分支进行更改.据我所知,当我做git branch时,这个分支是用*(星号)标记的分支.

谢谢你的帮助.

Von*_*onC 49

问题是在推动什么,以及在哪里:

  • current:

    • " what "只是你当前的分支(没有其他分支),
    • " to where "是上游仓库中同名的分支(如果不存在则创建).
  • 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.
Run Code Online (Sandbox Code Playgroud)

两个(currentupstream)之间的区别在于(从远程到分支的什么?):

  • 推" current"并不意味着你的当前分支B具有remote/B有其上游分支.
    即:branch.B.merge当您正在推动" current"分支时,未设置.
    即:当拉到时B,git不会知道要拉什么分支.

  • 推" upstream"意味着你的当前分支B已经remote/B有它的上游分支.
    即:branch.B.merge 设定,当你正在推动的" upstream"分支.
    即:牵引时B,混帐知道什么分支拉(以及哪些远程回购:branch.B.remote)


Rob*_*mer 7

push.default最好在 git config ( man git-config)的手册页中介绍。

要了解 for 的“上游”和“当前”之间的区别push.default,您应该知道术语上游

上游是从普通本地分支到本地远程跟踪分支的本地指针。(是的,这些都是本地的。)示例:

  • 分支blablaorigin/blabla配置为上游(非常常见)
  • 分支blablaorigin/foo作为上游(分支具有不同的本地名称;不太常见)
  • 分支blablaorigin2/foo作为上游

请注意,origin/*分支是本地的,并且在每次从原点获取时(重新)设置。这些被称为“本地远程跟踪分支”。它们代表最后一次获取时远程“原点”上分支的状态。

每个(普通)本地分支都可以配置一个上游,但这不是必须的:上游关系的配置只是为了方便一些 git 命令!

git status例如,如果您执行 a ,git 会告诉您“x commits behind/ahead”,如果它知道上游(因此 git 可以与之进行比较)。

一个普通的初始git checkout blabla通常为你设置上游配置(如果 origin/blabla 存在,它被检出并设置为上游 - 否则检出失败)。

git push也可以使用分支的上游配置,即将您的新提交复制到代表上游的远程分支。(这是push.default = upstream。)

push.default = current让我们以相同的名称git push将新提交复制到远程。它完全忽略了上游配置。– 如果您的本地分支名称始终与远程分支名称相同,则两种配置具有相同的效果,但如果上游尚未配置,则with将失败。git pushpush.default = upstream

PD:是的,*在输出中git branch显示当前分支。