master的默认远程!=我创建的任何分支的默认远程

时间:2016-04-28 01:20:07

标签: git

说我有两个遥控器:

* official  (this is the official repo, no write permission)
* my_fork   (write permission)

我想将master分支的默认远程设置为official(以便我可以轻松跟踪其中的更改),并将my_fork设置为默认远程我创建的任何分支。

如何使用.git/configgit config

执行此操作

1 个答案:

答案 0 :(得分:2)

获取远程

没有“pullDefault”(或者更确切地说,fetchDefault)。这意味着当您创建每个分支时,您必须单独设置其远程。例如,您可以运行:

git checkout -b keep-working-on --track my_fork/existing-branch

--track是默认值,我将其包含在此处仅用于说明),或者:

git checkout -b newbr
git branch --set-upstream-to my_fork/newbr-name-there

或:

git checkout -b newbr
git push -u my_fork newbr:newbr-name-there

创建newbr并将其上游设置为my_fork/newbr-name-there(对于push -u版本,现在在上游创建newbr-name-there,假设它尚不存在)

请注意,如果您最终创建一个非-b - 标记为git checkout的分支,例如对于分支(通常为master)创建的分支始终为true在git clone末尾,git:

  1. 将名称搜索为现有的本地分支,但是这会失败(例如,在新的克隆中还没有master) - 如果搜索没有失败,我们就不会创建一个分支。这都不适用;
  2. 搜索所有当前定义的遥控器及其远程跟踪分支,以查看其中是否有任何一个被恰当地命名(例如,origin/masterofficial/mastermy_fork/master;当然,一个新的克隆,只有origin存在,但git为每个 git checkout执行此操作,假设我们甚至完成了步骤1);最后
  3. 如果恰好有一个此类分支,则创建一个新分支,其名称是您使用该远程(master)配置的名称(origin)和相应的远程跟踪分支(origin/master),就好像您已经运行git checkout -b master --track origin/master
  4. 这就是没有remote.fetchDefault的原因:如果有明显正确的遥控器,则自动计算正确的默认遥控器。否则git希望您使用--set-upstream-togit push -u方法设置或选择它,如果您无法选择现有分支(例如,创建新分支newbr)。

    推遥控器

    但是,按the git config documentation

      

    分支<名称>。远程

         

    当在分支< name>上时,它会告诉git fetch和git push从哪个远程提取/推送到。可以使用remote.pushDefault(对于所有分支)覆盖要推送到的远程。对于当前分支,可以进一步覆盖推送到当前分支的远程。< name> .pushRemote。如果没有配置远程,或者您不在任何分支上,则默认为origin用于获取,而remote.pushDefault用于推送。另外,。 (一个句点)是当前的本地存储库(点存储库),请参阅branch。< name> .merge的最后一个注释。

         

    分支<名称> .pushRemote

         

    当在分支< name>上时,它会覆盖branch。< name> .remote for pushing。它还会覆盖remote.pushDefault以从分支< name>推送。当您从一个地方(例如您的上游)拉出并推送到另一个地方(例如您自己的发布存储库)时,您可能希望设置remote.pushDefault以指定要推送到所有分支的远程,并使用此选项覆盖它对于特定的分支。

    这意味着无论您如何处理提取遥控器,都可以将remote.pushDefault设置为my_fork,这将使所有分支默认为推送到远程my_fork。然后,将branch.master.pushRemote设置为official,以便分支master将推送到official,而不是使用默认的my_fork遥控器。