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

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

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

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

从Git 1.8.0开始:

 git branch -u upstream/foo 

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

 git branch -u upstream/foo foo 

或者,如果您想input更长的命令,则这些命令与上述两个命令相同:

 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从远程upstream跟踪远程分支foo 。 旧的(1.7.x)语法不赞成使用新的(1.8+)语法。 新的语法旨在更直观,更易于记忆。


另请参阅: 为什么我需要始终执行“–set-upstream”?

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

如果你还没有设置“遥控器”,

 # git remote add origin ssh://... 

现在configuration高手知道跟踪:

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

并推送:

 # git push origin master 

我这样做是因为用-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 

你可能会发现git_remote_branch工具很有用。 它提供了创build,发布,删除,跟踪和重命名远程分支的简单命令。 一个很好的特性是你可以要求一个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 

其实对于接受的工作答案:

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

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

考虑到$BRANCHorigin/$BRANCH存在,并且您目前还没有签出$BRANCH (如果有的话,请离开),请执行以下操作:

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

这重新创build$BRANCH作为跟踪分支。 尽pipe$BRANCH已经存在, -f强制创build。 --track如果通常的默认值已经就绪,那么--track是可选的(也就是说,git-config参数branch.autosetupmerge为true)。

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

 git push origin $BRANCH 

紧接着前面的命令把本地分公司推进到一个跟踪分支。

确保你运行:

 git config push.default tracking 

能够推动无故障

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

在这里输入图像描述

2-使用: git branch -a显示你的远程和本地分支,见下面的截图

在这里输入图像描述

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

git checkout branchName

例如:

在这里输入图像描述

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

git分支–set-upstream-to nameOfRemoteBranch

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

使用示例:

在这里输入图像描述

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

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

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

在很短的时间内

 git branch --set-upstream yourLocalBranchName origin/develop 

这将使你的yourLocalBranchName追踪名为develop的远程分支。

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

 grb track foo upstream 

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

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

太简单!


概要。 只需运行这2个命令:

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

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

最后,我通过在.git/refs/remotes/origin/remotebranchname添加一个新的头文件,然后复制了ref(眼球是最快的,跛脚的, – )从系统访问到原始回购工作站(与本地回购,我正在添加远程分支)。

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

我使用下面的命令(假设你的分支名称是“分支名称”):

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

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

  git checkout --track -b示例来源/例子 

对于已经创build的分支来创build远程的链接,然后从该分支使用下面的命令

  git分支-u起源/远程分支名称 
  • git pull

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

  • 要么:

    git fetch && git checkout <branch-name>

这不是对这个问题的直接回答,但是我想在这里给任何可能与我有同样问题的人在这里留下一个笔记,当试图configuration一个上游分支。

警惕push.default

使用旧的git版本时,默认情况是匹配的 ,如果你有,那么会导致非常不好的行为,例如:

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

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

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

这给了更多理智的行为:

git config –global push.default上游

这也可以

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

或者简单地通过:

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

 [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看看configuration文件,看看什么是跟踪什么运行:

  [za]$ git config -e