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

时间:2009-02-06 15:14:05

标签: git branch git-branch

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

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

22 个答案:

答案 0 :(得分:4034)

给定分支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开始:

git branch --set-upstream foo upstream/foo

备注:

  • 以上所有命令都会导致本地分支foo从远程foo跟踪远程分支upstream
  • 旧的(1.7.x)语法不赞成使用新的(1.8+)语法。新语法旨在更直观,更易于记忆。
  • 使用尚未获取的新创建的遥控器定义上游将失败。在这种情况下,事先运行git fetch upstream

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

答案 1 :(得分:225)

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

如果您还没有设置'遥控'

git remote add origin ssh://...

现在配置master以了解跟踪:

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

推动:

git push origin master

答案 2 :(得分:145)

我这样做是为了推送使用{/ 1}}选项的副作用,如

-u

等效的长选项是$ git push -u origin branch-name

--set-upstream命令也理解git-branch,但它的使用可能令人困惑。 Version 1.8.0修改界面。

  

--set-upstream已被弃用,可能会在相对较远的将来被删除。 git branch --set-upstream引入了一个更健全的论点。

     

...

     

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

假设您有一个本地-u分支,并希望它以与其上游相同的名称处理分支。用

实现这一目标
foo

或只是

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

答案 3 :(得分:51)

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

答案 4 :(得分:50)

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

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

答案 5 :(得分:42)

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

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

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

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

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

git push origin $BRANCH

按照上一个命令将本地分支提升为跟踪分支。

答案 6 :(得分:32)

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

答案 7 :(得分:22)

确保你跑:

git config push.default tracking

能够无故障地推送

答案 8 :(得分:21)

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

如果您不想手工处理文件(并且这并不难),您可以随时使用git config来执行此操作...但是,这只是编辑无论如何,.git/config档案。

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

答案 9 :(得分:16)

非常短暂

git branch --set-upstream yourLocalBranchName origin/develop

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

答案 10 :(得分:14)

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

grb track foo upstream

这将导致Git foo追踪upstream/foo

答案 11 :(得分:9)

使用&#39; - 追踪&#39;选项

  • git checkout --track <remote-branch-name>之后:

    git fetch && git checkout <branch-name>

  • 或者:

    {{1}}

答案 12 :(得分:8)

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

太容易了!

摘要。只需运行以下两个命令:

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

答案 13 :(得分:8)

我使用以下命令(假设您的本地分支名称为&#34; branch-name-local&#34;远程分支名称为&#34; branch-name-remote&#34;):

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

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

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

答案 14 :(得分:6)

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

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

 git branch -u origin/remote-branch-name

答案 15 :(得分:4)

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

警惕 push.default

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

本地分支&#34; master&#34;跟踪到原点/主人

远程分支&#34;上游&#34;跟踪上游/主人

如果你试图&#34; git push&#34;在&#34;上游&#34;分支, push.default匹配 git将自动尝试合并本地分支&#34; master&#34;进入&#34;上游/掌握&#34;,造成了很多混乱。

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

git config --global push.default upstream

答案 16 :(得分:4)

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

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

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

答案 17 :(得分:3)

或简单地通过:

如果您尚未进入分支,请切换到分支:

[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 

答案 18 :(得分:1)

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

git branch -u origin/$(git rev-parse --abbrev-ref HEAD)

答案 19 :(得分:1)

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

git push --set-upstream origin <local_branch_name>

答案 20 :(得分:0)

避免记住,每次收到消息时您需要做什么:

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

您可以使用以下脚本将当前分支来源设置为上游

就我而言,我几乎从未来源以外的其他内容设置为默认上游。另外,我几乎总是为本地和远程分支保留相同的分支名称。因此,以下内容适合我:

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

答案 21 :(得分:-1)

这也会起作用

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