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

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


当前回答

使用“--track”选项

在一次git拉动后:git checkout--track<远程分支名称>或:git获取和git签出<分支名称>

其他回答

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

小心push.default。

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

本地分支机构“主”跟踪到原点/主

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

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

这会产生更理智的行为:

git-config—全局push.default上游

为了创建新分支,我们可以使用以下命令git checkout--track-b示例原点/example对于已创建的分支,要在远程分支之间创建链接,请使用以下命令

gitbranch-u源/远程分支名称

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

$ git push -u origin branch-name

等效的长选项是--set upstream。

gitbranch命令也理解--set upstream,但它的使用可能会令人困惑。1.8.0版修改了界面。

gitbranch-set-upstream已被弃用,可能会在较远的将来被删除。git分支[-u|--setupstreamto]是以更合理的参数顺序引入的。…很容易说git-branch——set-upstream-origin/master,但这告诉git安排本地分支“origin/matter”与当前签出的分支集成,这不太可能是用户的意思。该选项已弃用;改为使用新的--set upstream to(带有一个短而甜的-u)选项。

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

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

以某种相关的方式,我试图将远程跟踪分支添加到现有分支,但无法访问系统上的远程存储库,我想在其中添加远程跟踪分支(因为我经常通过sneakernet将此回购的副本导出到另一个有权推送到该远程的系统)。我发现没有办法强制在本地上添加尚未提取的远程分支(因此本地不知道该分支在远程上存在,我会得到错误:请求的上游分支“origin/remotebranchname”不存在)。

最后,我通过在.git/refs/remotes/origin/remothbranchname处添加一个新的头文件,然后将ref(眼球移动最快,虽然很蹩脚;-)从有权访问原始存储库的系统复制到工作站(使用我添加远程分支的本地存储库),成功地添加了以前未知的新远程分支(无需获取)。

完成后,我可以使用gitbranch--setupstreamto=origin/remotebranchname

为了避免记住每次收到信息时需要做什么:

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

可以使用以下脚本,该脚本将原点设置为当前分支的上游。

在我的例子中,我几乎从未将原点以外的其他东西设置为默认上游。此外,我几乎总是为本地和远程分支保留相同的分支名称。因此,以下内容适合我:

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