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

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

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


#1楼

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

#2楼

很短的

git branch --set-upstream yourLocalBranchName origin/develop

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


#3楼

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

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


#4楼

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

grb track foo upstream

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


#5楼

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

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

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


#6楼

我相信,早在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

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


#7楼

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

#8楼

我使用以下命令(假设您的本地分支名称是“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

#9楼

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

警惕push.default

对于较旧的git版本,默认值是匹配的 ,如果你有,那将导致非常不良的行为,例如:

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

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

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

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

git config --global push.default upstream


#10楼

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

在此输入图像描述

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

在此输入图像描述

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

git checkout branchName

例如:

在此输入图像描述

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

git branch --set-upstream-to nameOfRemoteBranch

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

使用示例:

在此输入图像描述


#11楼

这也会奏效

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

#12楼

使用'--track'选项

  • git pull

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

  • 要么:

    git fetch && git checkout <branch-name>


#13楼

或者简单地通过:

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

[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 

#14楼

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

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

#15楼

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

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

  git branch -u origin / remote-branch-name 


#16楼

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

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

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


#17楼

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

#18楼

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

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

#19楼

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

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

git remote add origin ssh://...

现在配置master来知道跟踪:

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

并推:

git push origin master

#20楼

确保你运行:

git config push.default tracking

能够推动无故障

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值