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

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


当前回答

给定分支foo和远程上游:

截至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从远程上游跟踪远程分支foo。旧的(1.7.x)语法被弃用,取而代之的是新的(1.8+)语法。新语法旨在更直观、更容易记住。当对尚未获取的新创建的远程设备运行时,定义上游分支将失败。在这种情况下,请预先在上游运行gitfetch。


另请参见:为什么我需要一直做“--set upstream”?

其他回答

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

如果您还没有“远程”,请设置它

git remote add origin ssh://...

现在配置master以了解跟踪:

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。

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

在这里,使用github和git版本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

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

git push --set-upstream origin <local_branch_name>

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

grb track foo upstream

这将导致Git使foo跟踪上游/foo。