3787

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

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

4

22 回答 22

4568

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

从 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

从 Git 1.7.0(1.8.0 之前)开始:

git branch --set-upstream foo upstream/foo

笔记:

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

另请参阅:为什么我需要一直执行 `--set-upstream`?

于 2010-02-18T03:06:52.900 回答
259

您可以执行以下操作(假设您已在 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
于 2009-03-09T08:50:23.650 回答
176

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

$ git push -u origin branch-name

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

git-branch命令也可以理解--set-upstream,但它的使用可能会令人困惑。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
于 2012-10-02T16:24:00.303 回答
66

对于 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
于 2010-11-23T12:08:42.100 回答
58

您可能会发现该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
于 2009-02-06T17:11:44.830 回答
48

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

鉴于这一点$BRANCH并且origin/$BRANCH存在,并且您当前尚未签出$BRANCH(如果有,请切换),请执行以下操作:

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

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

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

git push origin $BRANCH

紧接着上一条命令将本地分支提升为跟踪分支。

于 2010-07-28T09:33:52.843 回答
45

1- 使用git fetch --all更新您的本地元数据

在此处输入图像描述

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

在此处输入图像描述

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

git checkout 分支名称

例子 :

在此处输入图像描述

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

git branch --set-upstream-to nameOfRemoteBranch

注意:nameOfRemoteBranch:从步骤 2 的输出中复制“git branch -r”

使用示例:

在此处输入图像描述

于 2016-06-06T14:21:12.240 回答
27

确保你运行:

git config push.default tracking

能够摆脱麻烦

于 2011-08-29T21:38:32.473 回答
25

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

如果您不想手动处理文件(这并不难),您可以随时使用git config它......但同样,无论如何,这只是要编辑.git/config文件。

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

于 2009-02-06T15:17:54.530 回答
20

简而言之

git branch --set-upstream yourLocalBranchName origin/develop

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

于 2012-10-09T07:19:03.180 回答
17

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

grb track foo upstream

这将导致 Gitfoo跟踪upstream/foo

于 2010-06-01T02:23:47.553 回答
15

我使用以下命令(假设您的本地分支名称是“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
于 2015-12-22T09:46:13.040 回答
10

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

看?现在,如果您只是结帐开发,它会自动发挥作用:

$ 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
于 2015-11-29T23:04:57.007 回答
10

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

git checkout --track -b 示例来源/示例
对于已经创建的分支在远程之间创建链接,然后从该分支使用以下命令

git 分支 -u 来源/远程分支名称

于 2017-04-20T10:24:24.520 回答
9

使用“--track”选项

  • 之后git pull

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

  • 或者:

    git fetch && git checkout <branch-name>

于 2016-08-02T10:23:19.343 回答
7

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

git push --set-upstream origin <local_branch_name>
于 2020-08-13T12:38:34.860 回答
6

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

小心push.default

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

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

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

如果你在“upstream”分支上尝试“git push”,与push.default 匹配的 git 会自动尝试将本地分支“master”合并到“upstream/master”中,造成一大堆混乱。

这给出了更理智的行为:

git config --global push.default 上游

于 2016-05-21T12:53:42.560 回答
5

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

最后,我设法添加了一个新的、以前未知的远程分支(没有获取),方法是添加一个新的头文件,.git/refs/remotes/origin/remotebranchname然后从可以访问源的系统复制 ref(目测是最快的,因为它是蹩脚的;-) repo 到工作站(使用我添加远程分支的本地 repo)。

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

于 2015-10-05T06:10:44.840 回答
4

或简单地通过:

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

[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 
于 2016-10-07T16:20:58.363 回答
1

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

git branch -u origin/$(git rev-parse --abbrev-ref HEAD)
于 2019-02-26T09:54:35.220 回答
0

为避免每次收到消息时都记住需要执行的操作:

请指定要合并的分支。有关详细信息,请参阅 git-pull(1)

......

您可以使用以下脚本将原点设置为您所在的当前分支的上游

就我而言,我几乎从不origin 以外的其他内容设置为默认的 upstream。此外,我几乎总是为本地和远程分支保留相同的分支名称。所以以下适合我:

#!/bin/bash
# scriptname: git-branch-set-originupstream
current_branch="$(git branch | grep -oP '(?<=^\* )(.*)$')"
upstream="origin/$current_branch"
git branch -u "$upstream"
于 2020-04-15T09:39:59.787 回答
-2

这也可以

git branch --set-upstream-to=/< remote>/< branch> < localbranch>
于 2016-06-22T16:37:35.087 回答