代码之家  ›  专栏  ›  技术社区  ›  Pat Notz

使现有Git分支跟踪远程分支?

  •  3991
  • Pat Notz  · 技术社区  · 17 年前

    我知道如何创建一个跟踪远程分支的新分支,但是 如何使现有分支跟踪远程分支?

    我知道我可以编辑 .git/config 文件,但似乎应该有一种更简单的方法。

    23 回复  |  直到 12 年前
        1
  •  4498
  •   isapir    6 年前

    给定一个分支 foo 还有一个遥控器 upstream :

    从Git 1.8.0开始:

    git branch -u upstream/foo
    

    或者,如果当地分行 足球 不是当前分支:

    git branch -u upstream/foo foo
    

    或者,如果你想键入更长的命令,这些命令与上述两个命令等效:

    git branch --set-upstream-to=upstream/foo
    
    git branch --set-upstream-to=upstream/foo foo
    

    从Git 1.7.0(1.8.0之前)开始:

    git branch --set-upstream foo upstream/foo
    

    笔记:

    • 上述所有命令都将导致本地分支 足球 跟踪远程分支 足球 从远程 上游 .
    • 旧的(1.7.x)语法已被弃用,取而代之的是新的(1.8+)语法。新语法旨在更直观、更容易记忆。
    • 当对尚未获取的新创建的远程运行时,定义上游分支将失败。在这种情况下,运行 git fetch upstream 事先。

    另请参见: Why do I need to do `--set-upstream` all the time?

        2
  •  254
  •   Josh    8 年前

    您可以执行以下操作(假设您在master上签出并希望推送到远程分支master):

    如果您还没有“遥控器”,请设置它

    git remote add origin ssh://...
    

    现在配置master知道要跟踪:

    git config branch.master.remote origin
    git config branch.master.merge refs/heads/master
    

    并推:

    git push origin master
    
        3
  •  175
  •   Saurav Sahu    9 年前

    我这样做是因为用力推的副作用 -u 选项如

    $ git push -u origin branch-name
    

    等效的长期权是 --set-upstream .

    这个 git-branch 命令也理解 --设置在上游 ,但它的使用可能会令人困惑。 Version 1.8.0 修改界面。

    git branch --set-upstream 已弃用,并可能在相对遥远的将来被删除。 git branch [-u|--set-upstream-to] 以更合理的论证顺序引入。

    很想说 git branch --set-upstream origin/master ,但这告诉Git安排本地分支“origin/master”与当前签出的分支集成,这不太可能是用户的意思。该选项已弃用;使用新 --set-upstream-to (用一个简短而甜蜜的 u )选择相反。

    假设你有一个本地 foo 分支已签出,并希望它使用与其上游同名的分支。通过以下方式实现这一点

    $ git branch --set-upstream-to=origin/foo
    
        4
  •  65
  •   Hedgehog    6 年前

    对于Git 1.8.0及更高版本:

    实际上,为了使公认的答案奏效:

    git remote add upstream <remote-url>
    git fetch upstream
    git branch -f --track qa upstream/qa
    # OR Git version 1.8.0 and higher:
    git branch --set-upstream-to=upstream/qa
    # Gitversions lower than 1.8.0
    git branch --set-upstream qa upstream/qa
    
        5
  •  58
  •   James Mead    12 年前

    你可能会发现 git_remote_branch 工具有用。它提供了创建、发布、删除、跟踪和删除的简单命令;重命名远程分支。一个很好的功能是,你可以问 grb 命令来解释它将执行哪些git命令。

    grb explain create my_branch github
    # git_remote_branch version 0.3.0
    
    # List of operations to do to create a new remote branch and track it locally:
    git push github master:refs/heads/my_branch
    git fetch github
    git branch --track my_branch github/my_branch
    git checkout my_branch
    
        6
  •  48
  •   wu-lee    12 年前

    1-使用以下方式更新您的本地元数据: git fetch--全部

    enter image description here

    2-使用以下方式显示您的远程和本地分支: 查看所有的分支 ,请参阅以下屏幕截图

    enter image description here

    3-切换到要与远程链接的目标分支:使用

    git结账分行名称

    例子:

    enter image description here

    4-使用以下方式将本地分支链接到远程分支:

    git branch--将上游设置为nameOfRemoteBranch

    N.B: nameOfRemoteBranch :从步骤2的输出中复制“git branch-r”

    使用示例:

    enter image description here

        7
  •  45
  •   Isaac    9 年前

    我相信早在Git 1.5.x中,你就可以创建一个本地分支 $BRANCH 跟踪远程分支 origin/$BRANCH 像这样。

    鉴于 $分行 原产地/$分公司 存在,但您当前尚未签出 $分行 (如果有的话,请切换),请执行以下操作:

    git branch -f --track $BRANCH origin/$BRANCH
    

    这再现了 $分行 作为一个跟踪分支。这个 -f 尽管如此,仍强行创造 $分行 已经存在。 --track 如果有常用的默认值(即git config参数),则是可选的 branch.autosetupmerge 是真的)。

    注意,如果 原产地/$分公司 还不存在,您可以通过推送本地来创建它 $分行 通过以下方式进入远程存储库:

    git push origin $BRANCH
    

    接着执行前面的命令,将本地分支提升为跟踪分支。

        8
  •  27
  •   romanlv    15 年前

    确保你跑:

    git config push.default tracking
    

    能够无故障地推进

        9
  •  25
  •   mipadi    17 年前

    编辑 .git/config 这可能是最简单、最快的方法。不管怎样,这就是处理远程分支的Git命令正在做的事情。

    如果你不想用手摆弄文件(这并不难),你可以随时使用 git config 要做到这一点……但同样,这只是编辑 .git/config 文件,不管怎样。

    当然,在使用时,有一些方法可以自动跟踪远程分支 git checkout (通过传递 --track 例如,flag),但这些命令适用于 分支机构,而不是现有的分支机构。

        10
  •  20
  •   Asclepius    12 年前

    简而言之

    git branch --set-upstream yourLocalBranchName origin/develop
    

    这将使你 yourLocalBranchName 跟踪调用的远程分支 develop .

        11
  •  17
  •   Peter Mortensen Pieter Jan Bonestroo    13 年前

    对于1.6.x,可以使用 git_remote_branch 工具:

    grb track foo upstream
    

    这将导致Git foo 轨道 upstream/foo .

        12
  •  15
  •   yrazlik    7 年前

    我使用以下命令(假设您的本地分支名称为“分支名称本地”,远程分支名称为”分支名称远程“):

    $ git branch --set-upstream-to=origin/branch-name-remote branch-name-local
    

    如果本地和远程分支具有相同的名称,则只需执行以下操作:

    $ git branch --set-upstream-to=origin/branch-name branch-name
    
        13
  •  10
  •   jithu reddy    9 年前

    为了创建新分支,我们可以使用以下命令

     git checkout --track -b example origin/example 
    对于已创建的分支,使用以下命令在远程和该分支之间创建链接

     git branch -u origin/remote-branch-name
        14
  •  9
  •   DrBeco    10 年前

    使用“--track”选项

    • a之后 git pull :

      git checkout --track <remote-branch-name>

    • 或者:

      git fetch && git checkout <branch-name>

        15
  •  9
  •   Loukan ElKadi    8 年前

    在这里,使用 github git version 2.1.4 ,只需执行:

    $ git clone git@github.com:user/repo.git
    

    遥控器由itelsef提供,即使没有本地链接:

    $ git remote show origin
    
    * remote origin
      Fetch URL: git@github.com:user/repo.git
      Push  URL: git@github.com:user/repo.git
      HEAD branch: master
      Remote branches:
        develop tracked         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        master  tracked
      Local branch configured for 'git pull':
        master merges with remote master
      Local ref configured for 'git push':
        master pushes to master (up to date)
    

    但当然,仍然没有本地分支机构:

    $ git branch
    * master                  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    

    看到了吗?现在,如果你只是签出develp,它会自动执行魔术:

    $ git checkout develop
    Branch develop set up to track remote branch develop from origin.
    Switched to a new branch 'develop'
    

    很容易!


    总结。 只需运行以下两个命令:

    $ git clone git@github.com:user/repo.git
    $ git checkout develop
    
        16
  •  6
  •   Tom Mettam    10 年前

    这不是对这个问题的直接回答,但我想在这里为任何在尝试配置上游分支时可能与我有同样问题的人留下一条注释。

    谨慎的 push.default .

    对于较旧的git版本,默认值为 相同的 ,这会导致非常不受欢迎的行为,例如:

    本地分支“主”跟踪到源/主

    远程分支“上游”跟踪到上游/主节点

    如果你在“上游”分支上尝试“git push” push.默认匹配 git会自动尝试将本地分支“master”合并到“upstream/master”中,从而导致大量混乱。

    这会带来更理智的行为:

    git config--全局推送默认上游

        17
  •  6
  •   iknow BIkash Subedi    6 年前

    对于git版本 2.25.1 ,使用以下命令:

    git push --set-upstream origin <local_branch_name>
    
        18
  •  5
  •   Ville    10 年前

    如果你有 “错误:请求的上游分支'origin/foo'不存在” 运行后:

    git branch -u origin/foo
    

    1. 确保 origin 确实有 foo 支。

    2. 确保 remote.origin.fetch 变量设置为 +refs/heads/*:refs/remotes/origin/* :

    $ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
    $ git config --get remote.origin.fetch
    +refs/heads/*:refs/remotes/origin/*
    
    1. git fetch -v 。您应该看到git从以下位置更新 origin/foo :
    $ git fetch -v
    From github.com:davidhcefx/test
     * [new branch]      foo             -> origin/foo
     = [up to date]      master          -> origin/master
    
    1. 一旦成功, git branch -avv 将显示方括号,表示跟踪的远程分支:
    $ git branch -u origin/foo
    branch 'foo' set up to track 'origin/foo'.
    $ git branch -avv
    * foo                            92c5ada [origin/foo] Initial commit
      master                         92c5ada [origin/master] Initial commit
    
        19
  •  4
  •   z atef    8 年前

    在某种程度上,我试图向现有分支添加一个远程跟踪分支,但无法访问我想添加该远程跟踪分支的系统上的远程存储库(因为我经常通过sneakernet将此仓库的副本导出到有权推送到该远程的另一个系统)。我发现无法强制在本地上添加尚未提取的远程分支(因此本地不知道远程上存在该分支,我会得到错误: the requested upstream branch 'origin/remotebranchname' does not exist ).

    最后,我通过在以下位置添加一个新的头文件,成功添加了新的、以前未知的远程分支(无需获取) .git/refs/remotes/origin/remotebranchname 然后将ref(目测最快,尽管很蹩脚;-)从可以访问源代码仓库的系统复制到工作站(在本地仓库中,我添加了远程分支)。

    一旦完成,我就可以使用 git branch --set-upstream-to=origin/remotebranchname

        20
  •  1
  •   Constantinos    7 年前

    或者简单地通过:

    如果您还不在分支中,请切换到该分支:

    [za]$ git checkout branch_name
    

    [za]$ git branch --set-upstream origin branch_name
    Branch origin set up to track local branch brnach_name by rebasing.
    

    您已准备好:

     [za]$ git push origin branch_name
    

    您可以通过运行以下命令来查看配置文件,以了解跟踪内容:

     [za]$ git config -e
    

    很高兴知道这一点,它显示了哪些分支被跟踪,哪些分支没有被跟踪。 :

      [za]$ git remote show origin 
    
        21
  •  0
  •   Marinos An    6 年前

    对于像我这样只想将本地分支名称与远程分支名称同步的人来说,这里有一个方便的命令:

    git branch -u origin/$(git rev-parse --abbrev-ref HEAD)
    
        22
  •  -2
  •   Mad Physicist    10 年前

    避免回忆 每次收到消息时你需要做什么:

    请指定要与哪个分支合并。参见git pull(1)
    了解详情。
    .....

    您可以使用以下脚本来设置 起源于上游 对于 当前分支 你加入了。

    就我而言,我 几乎从不 设置 起源之外的东西 作为 默认上游 此外,我几乎总是为本地和远程分支保留相同的分支名称。因此,以下内容适合我:

    #!/bin/bash
    # scriptname: git-branch-set-originupstream
    current_branch="$(git branch | grep -oP '(?<=^\* )(.*)$')"
    upstream="origin/$current_branch"
    git branch -u "$upstream"