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


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

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


3080
2018-02-06 15:14


起源


如下所述,对于现有分支,您可以使用 git push -u origin branch-name。 - Zags
以供参考, 该 git branch 文件。
如果本地分支是当前分支,并且本地分支尚未跟踪远程分支, git pull 通常会提供有关设置跟踪信息的相应命令的有用信息 - billrichards
当一个人学习git以显示git文档的链接时,这很烦人。该文档似乎是为那些人写的 已经 知道他们用git做了什么。 - Felipe Alvarez
从Git 2.10开始,你应该首先检查到预定的本地分支,然后执行此操作 git branch --set-upstream-to origin/<branch> - Mahdi Javaheri


答案:


给定一个分支 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+)语法。新语法旨在更直观,更易于记忆。


也可以看看: 为什么我需要一直做`--set-upstream`?


3752
2018-02-18 03:06



“上游”是遥控器的名称吗?即大多数人默认称之为“起源”? - Andrew Vit
@Andrew:是的。 git branch --set-upstream master origin/master 等同于最初克隆存储库时自动完成的操作。 - Dan Moulding
在相关的说明中,将此添加到您的gitconfig是非常棒的:“[push] default = tracking”这将使它推送到同一个地方拉出来:) - jpswain
我得到“致命:不是有效的对象名称:'origin / master'。” - joachim
git push -u origin foo  通过 - Cotton


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

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

git remote add origin ssh://...

现在配置master来跟踪:

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

并推:

git push origin master

206
2018-03-09 08:50



它真的需要遥控器和分支机构吗?我的意思是,如果您签出的分支不是您要推送的分支,那么您只需要它,对吧? - Doppelganger
是的 - 但是从内存中你可能需要明确第一次推送。当然可以轻松测试...... :) - Paul Hedderly
+1这是Windows用户的答案,他们坚持使用1.8之前的msysgit“预览”。感谢那。 - John
这是唯一对我有用的答案。当我尝试接受的答案时,为现有分支设置上游远程,我得到: error: the requested upstream branch 'upstream/master' does not exist。 - Steve K
@SteveK最有可能因为您的上游被调用 origin 并不是 upstream。 - umläute


我这样做是为了推动与...的副作用 -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 (短而甜蜜 -u)而是选项。

说你有一个本地人 foo 分支,并希望它以与其上游相同的名称处理分支。用这个来实现

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

要不就

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

130
2017-10-02 16:24



这是一个更好的解决方案imo - Nils_e


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

51
2018-02-06 17:11



是 grb 标准命令?可用哪个套餐? - Jaseem
grb是一种红宝石宝石,可以按照说明进行访问 他们的github - mcabrams
OP正在询问有关Git本身的问题。所以不介绍新工具可能会更好。 - zeekvfu
grb是我的macOS安装上的git-rebase的别名。我没有这样做:) - highmaintenance


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

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

49
2017-11-23 12:08



本地分支已经跟踪了一个分支,因此我们可以假设已经添加了远程仓库。 - Doppelganger
Dopplerganger:请参阅joachim对已接受答案的评论。无论如何,假设很容易不同 - 它是什么让事情如此有趣;) - Hedgehog


我相信,早在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 是真的)。

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

git push origin $BRANCH

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


40
2017-07-28 09:33



git push origin $BRANCH是我在寻找的。 - User
在尝试了各种解决方案之后,包括如上所述设置上游没有任何效果。我想要做的就是从一个远程的分支中将1个新提交提取到我的本地分支中,并且我最初没有设置跟踪。命令 git branch -f --track $BRANCH origin/$BRANCH 诀窍。 - DemitryT


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


28
2018-06-06 14:21



有效。谢谢 - Rahal Kanishka
大多简单易行的答案。 - vibs2006


确保你运行:

git config push.default tracking

能够推动无故障


22
2017-08-29 21:38



这可能很方便。但是,我们可以注意到,根据 git-config(1) 手册页, tracking 是不推荐使用的同义词 upstream。 - FooF