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

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

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

1644937 次浏览

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

如果你不想手动处理文件(这并不难做到),你总是可以使用git config来做到这一点……但是,无论如何,这只是编辑.git/config文件。

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

您可能会发现#0工具很有用。它提供了用于创建、发布、删除、跟踪和重命名远程分支的简单命令。一个不错的功能是您可以要求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_branchgit fetch githubgit branch --track my_branch github/my_branchgit checkout my_branch

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

设置“远程”如果你还没有它

git remote add origin ssh://...

现在配置master知道跟踪:

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

然后推:

git push origin master

给定一个分支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从远程upstream跟踪远程分支foo
  • 旧的(1.7. x)语法已被弃用,取而代之的是新的(1.8+)语法。新语法旨在更直观、更易于记忆。
  • 当对尚未获取的新创建的远程数据库运行时,定义上游分支将失败。在这种情况下,请事先运行git fetch upstream

另见:为什么我需要一直做'--set-上游'?

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

grb track foo upstream

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

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

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

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

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

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

git push origin $BRANCH

接着是前一个命令,将本地分支提升为跟踪分支。

对于Git版本1.8.0及更高版本:

实际上,对于工作的公认答案:

git remote add upstream <remote-url>git fetch upstreamgit 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.0git branch --set-upstream qa upstream/qa

确保你运行:

git config push.default tracking

能够把麻烦推开

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

$ git push -u origin branch-name

等效的long选项是--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安排本地分支“起源/主”与当前签出的分支集成,这是用户极不可能的意思。该选项已被弃用;使用新的--set-upstream-to(带有简短的-u)选项。

假设您签出了一个本地foo分支,并希望它使用与其上游同名的分支。通过

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

在很短

git branch --set-upstream yourLocalBranchName origin/develop

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

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

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

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

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

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

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

$ git remote show origin
* remote originFetch URL: git@github.com:user/repo.gitPush  URL: git@github.com:user/repo.gitHEAD branch: masterRemote branches:develop tracked         <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<master  trackedLocal branch configured for 'git pull':master merges with remote masterLocal ref configured for 'git push':master pushes to master (up to date)

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

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

看到了吗?现在如果你只是签出develp,它会自动完成魔法:

$ git checkout developBranch 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

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

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

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

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

这不是对这个问题的直接回答,但我想在这里给任何在尝试配置上游分支时可能遇到与我相同问题的人留个便条。

小心push.default

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

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

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

如果您在“上游”分支上尝试“git ush”,使用push.default匹配 git会自动尝试将本地分支“master”合并为“上游/master”,从而导致大量混乱。

这给出了更理智的行为:

git config--全局push.default上游

1-使用以下命令更新本地元数据:获取文件

在此处输入图片描述

2-显示您的远程和本地分支使用:git分支-a,查看以下截图

在此处输入图片描述

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

git检出分支名称

例子:

输入图片描述

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

#将上游设置为名称

注意:分支名称:从步骤2的输出复制“git分支-r”

使用示例:

在此处输入图片描述

这个也可以

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

使用'--Track'选项

  • git pull之后:

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

  • 或者:

    git fetch && git checkout <branch-name>

或者简单地说:

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

[za]$ git checkout branch_name

运行

[za]$ git branch --set-upstream origin branch_nameBranch 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

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

 git checkout --track -b example origin/example 
For the already created branch to create link between remote then from that branch use below command

 git branch -u origin/remote-branch-name

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

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

避免记住每次收到消息时需要做的事情:

请指定您要合并的分支。参见git-ull(1)
查看详情。

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

在我的情况下,我几乎从未不是起源的东西设置为默认上游。此外,我几乎总是为本地和远程分支保留相同的分支名称。所以以下适合我:

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

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

git push --set-upstream origin <local_branch_name>

如果您在运行后获得"错误:请求的上游分支'源/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 -vFrom github.com:davidhcefx/test* [new branch]      foo             -> origin/foo= [up to date]      master          -> origin/master
  1. 成功后,git branch -avv将显示方括号,指示跟踪的远程分支:
$ git branch -u origin/foobranch 'foo' set up to track 'origin/foo'.$ git branch -avv* foo                            92c5ada [origin/foo] Initial commitmaster                         92c5ada [origin/master] Initial commit