首页 文章

让现有的Git分支跟踪一个远程分支?

提问于
浏览
3185

我知道如何创建一个跟踪远程分支的新分支,但 how do I make an existing branch track a remote branch?

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

19 回答

  • 31

    您可能会发现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
    
  • 16

    这也会奏效

    git branch --set-upstream-to=/< remote>/< branch> < localbranch>
    
  • 3885

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

    鉴于 $BRANCHorigin/$BRANCH 存在,并且您目前尚未检出 $BRANCH (如果有,请切换),请执行以下操作:

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

    这将重新创建 $BRANCH 作为跟踪分支 . 尽管已经存在 $BRANCH ,但 -f 强制创建 . 如果通常的默认值就位,则 --track 是可选的(即git-config参数 branch.autosetupmerge 为真) .

    注意,如果 origin/$BRANCH 尚不存在,您可以通过将本地 $BRANCH 推入远程存储库来创建它:

    git push origin $BRANCH
    

    接下来是上一个命令,将本地分支推进到跟踪分支 .

  • 4

    确保你运行:

    git config push.default tracking
    

    能够推动无故障

  • 137

    或者简单地通过:

    如果你还没有进入分支,请切换到分支:

    [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
    

    你可以alawys看一下配置文件,看看通过运行跟踪什么:

    [za]$ git config -e
    

    知道这一点也很好,它显示了哪些分支被跟踪,哪些分支没有 . :

    [za]$ git remote show origin
    
  • 49

    我这样做是为了推动使用 -u 选项的副作用

    $ git push -u origin branch-name
    

    等效的长选项是 --set-upstream .

    git-branch 命令也理解 --set-upstream ,但它的使用可能令人困惑 . 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(使用short-and-sweet -u)选项 .

    假设您有一个本地 foo 分支,并希望它以与其上游相同的名称处理分支 . 用这个来实现

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

    要不就

    $ git branch --set-upstream-to=origin/foo foo
    
  • 4

    在这里,使用 githubgit 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'
    

    太简单!


    Summary. 只需运行以下两个命令:

    $ git clone git@github.com:user/repo.git
    $ git checkout develop
    
  • 51

    这不是这个问题的直接答案,但我想在这里留下一个注释,以便在尝试配置上游分支时可能遇到与我相同问题的任何人 .

    警惕 push.default .

    对于较旧的git版本,默认值为 matching ,如果您有,则会导致非常不良的行为,例如:

    本地分支“master”跟踪到origin / master

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

    如果您在"upstream"分支上尝试"git push",使用 push.default matching git会自动尝试将本地分支"master"合并到"upstream/master"中,从而导致大量混乱 .

    这样可以提供更明智的行为:

    git config --global push.default upstream

  • 3

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

    git checkout --track -b example origin/example
    

    对于已经创建的分支,在远程之间创建链接,然后从该分支使用下面的命令

    git branch -u origin/remote-branch-name
    
  • 22

    编辑 .git/config 可能是最简单,最快捷的方式 . 无论如何,这就是处理远程分支的Git命令正在做的事情 .

    如果你不那么难做,你可以随时使用 git config 来做...但是,无论如何,这只是编辑 .git/config 文件 .

    当然,有一些方法可以在使用 git checkout 时自动跟踪远程分支(例如,传递 --track 标志),但这些命令适用于新分支,而不是现有分支 .

  • 4

    给定一个分支 foo 和一个远程 upstream

    As of Git 1.8.0:

    git branch -u upstream/foo
    

    或者,如果本地分支 foo 不是当前分支:

    git branch -u upstream/foo foo
    

    或者,如果您想键入更长的命令,这些命令等同于以上两个:

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

    As of Git 1.7.0:

    git branch --set-upstream foo upstream/foo
    

    Notes:

    所有上述命令都将导致本地分支 foo 从远程 upstream 跟踪远程分支 foo . 不推荐使用旧的(1.7.x)语法,而采用新的(1.8)语法 . 新语法旨在更直观,更易于记忆 .


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

  • 217

    我以某种相关的方式尝试将远程跟踪分支添加到现有分支,但无法访问该远程分支我希望在系统上添加远程跟踪分支的存储库(因为我经常通过sneakernet将此repo的副本导出到另一个可以推送到该远程的系统) . 我发现没有办法强制在尚未获取的本地上添加远程分支(因此本地不知道远程分支存在,我会得到错误: the requested upstream branch 'origin/remotebranchname' does not exist ) .

    最后,我设法添加一个新的,以前未知的远程分支(没有提取),在 .git/refs/remotes/origin/remotebranchname 添加一个新的头文件,然后复制ref(眼球是最快的,因为它是蹩脚的;-)从系统访问到原始仓库到工作站(使用我添加远程分支的本地仓库) .

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

  • 21

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

    grb track foo upstream
    

    这将导致Git使 foo 跟踪 upstream/foo .

  • -1

    使用'--track'选项

    • git pull 之后:

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

    • 或者:

    git fetch && git checkout <branch-name>

  • 42

    实际上,对于已接受的工作答案:

    git remote add upstream <remote-url>
    git fetch upstream
    git branch -f --track qa upstream/qa
    # OR:
    git branch --set-upstream qa upstream/qa
    
  • 7

    很短的

    git branch --set-upstream yourLocalBranchName origin/develop
    

    这将使您的 yourLocalBranchName 跟踪名为 develop 的远程分支 .

  • 14

    我使用以下命令(假设您的本地分支名称是“branch-name-local”,远程分支名称是“branch-name-remote”):

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

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

    $ git branch --set-upstream-to=origin/branch-name branch-name
    
  • 6

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

    如果您还没有设置'遥控',请设置它

    git remote add origin ssh://...
    

    现在配置master来跟踪:

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

    并推:

    git push origin master
    
  • 8

    1-使用以下方法更新本地元数据: git fetch --all

    enter image description here

    2-使用: git branch -a 显示您的远程和本地分支,请参阅以下屏幕截图

    enter image description here

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

    git checkout branchName

    例子:

    enter image description here

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

    git branch --set-upstream-to nameOfRemoteBranch

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

    使用示例:

    enter image description here

相关问题