Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 主机的默认遥控器!=我创建的任何分支的默认远程_Git - Fatal编程技术网

Git 主机的默认遥控器!=我创建的任何分支的默认远程

Git 主机的默认遥控器!=我创建的任何分支的默认远程,git,Git,假设我有两个遥控器: * official (this is the official repo, no write permission) * my_fork (write permission) 我想将我的master分支的默认遥控器设置为official(这样我可以轻松跟踪那里的更改),并将my_fork设置为我创建的任何分支的默认遥控器 如何使用我的.git/config或git-config实现这一点?抓取遥控器 没有“pullDefault”(或者更恰当地说,fetchDef

假设我有两个遥控器:

* official  (this is the official repo, no write permission)
* my_fork   (write permission)
我想将我的
master
分支的默认遥控器设置为
official
(这样我可以轻松跟踪那里的更改),并将
my_fork
设置为我创建的任何分支的默认遥控器

如何使用我的
.git/config
git-config
实现这一点?

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

git checkout -b keep-working-on --track my_fork/existing-branch
--track
是默认值,我在这里加入它只是为了明确说明),或者:

或:

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

请注意,如果您最终创建了一个带有非
-b
-标记的
git checkout
的分支,例如在
git clone
末尾创建的分支(通常是
master
),git:

  • 将名称作为现有本地分支进行搜索,但搜索失败(例如,在新克隆中还没有
    master
    )-如果搜索没有失败,我们毕竟不会创建分支,并且这些都不适用
  • 搜索所有当前定义的远程设备及其远程跟踪分支,以查看其中是否有正确的名称(例如,
    origin/master
    official/master
    my_fork/master
    ;当然,在一个新的克隆中,只有
    origin
    存在,但git会对每个
    git签出进行此操作,假设我们甚至完成了步骤1);最后
  • 如果只有一个这样的分支,则创建一个新分支,其名称为您提供的名称(
    master
    ),该名称配置有该远程(
    origin
    )和相应的远程跟踪分支(
    origin/master
    ),就像您运行了
    git checkout-b master--track origin master
  • 这就是为什么没有
    远程。fetchDefault
    :如果存在明显正确的远程,则会自动计算正确的默认远程。否则,git希望您使用
    --set upstream to
    git push-u
    方法设置或选择它,如果您无法选择现有分支(例如,创建新分支
    newbr

    推送遥控器 但是,根据:

    分支..远程

    在分支上时,它会告诉git fetch和git push从哪个远程设备获取/推送到哪个远程设备。推送到的远程设备可能会被remote.pushDefault覆盖(对于所有分支)。对于当前分支,要推送到的远程可能会被branch..pushRemote进一步覆盖。如果未配置远程,或者您不在任何分支上,则默认为origin进行获取,remote.pushDefault进行推送。此外,(a句点)是当前本地存储库(点存储库),请参见下面的branch..merge的最后一个注释

    分机

    在branch上时,它会覆盖branch..remote以进行推送。它也会覆盖remote.pushDefault以从branch上推送。当您从一个位置(例如,您的上游)拉送并推送到另一个位置(例如,您自己的发布存储库)时,您可能希望设置remote.pushDefault为所有分支指定要推送到的远程,并使用此选项覆盖特定分支的远程

    这意味着,无论您如何处理fetch remote,您都可以将
    remote.pushDefault
    设置为
    my_fork
    ,这将使所有分支默认为push to remote
    my_fork
    。然后,将
    branch.master.pushRemote
    设置为
    official
    ,这样分支
    master
    将推送到
    office>ial
    而不是使用默认的
    my_fork
    remote

    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