【问题标题】:What's the difference between `git config` and `git push --set-upstream``git config` 和 `git push --set-upstream` 有什么区别
【发布时间】:2011-12-06 01:17:11
【问题描述】:

问题

两者有什么区别:

$ git remote add origin git@github.com:yourname/yourproject.git
$ git config remote.origin.push refs/heads/master:refs/heads/master
$ git push

和:

$ git remote add origin git@github.com:yourname/yourproject.git
$ git push origin master -u

第二个版本只是比第一个版本更新更短,还是有其他区别?

背景研究

从 Git 1.7.0 开始,您可以将 --set-upstream 选项与 git push 一起使用。根据git push手册:

-u, --set-upstream
    For every branch that is up to date or successfully pushed, add upstream
    (tracking) reference, used by argument-less git-pull(1) and other commands. For
    more information, see branch.<name>.merge in git-config(1).

【问题讨论】:

    标签: git git-push git-config


    【解决方案1】:

    不,这些是非常不同的。第一个配置设置,remote.&lt;name&gt;.push 设置一个默认的 refspec 用于推送,如果没有指定其他 refspec。默认情况下,执行git push origin 会将每个分支推送到具有匹配名称的分支,只要远程上已经存在具有该名称的分支。做完之后:

    git config remote.origin.push refs/heads/master:refs/heads/master
    

    ...你会发现git push origin 只会将master 推送到master

    如果推送成功,您引用的另一个命令 git push -u origin master 会设置两个不同的配置选项:

    • branch.master.remote 设置为 origin
    • branch.master.merge 设置为 refs/heads/master

    这些本质上是说origin 中的master 应该被视为master 分支的默认“上游”分支。它们最明显的效果是在您使用 master 时为 git pull 提供默认操作,但也用于各种其他情况,例如在 git status 顶部提供有用的消息,告诉您在哪里masterorigin/master 进行比较。但是,这些设置不是,用于通知git pushgit push origin 的默认操作,除非您还将配置选项push.default 设置为tracking(或最近的upstream版本)。

    因此,作为一个非常近似的总结,设置remote.&lt;name&gt;.push 会影响git push 的默认操作,而git push -u origin master 设置的配置选项通常只会影响git pull 的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 2011-02-14
      • 2012-08-06
      • 2012-09-09
      • 2018-02-07
      • 2017-09-12
      相关资源
      最近更新 更多