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

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


当前回答

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

如果你不想手动处理这个文件(这并不难),你可以一直使用git-config来完成……但同样,这只会编辑.git/config文件。

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

其他回答

我相信,早在Git1.5.x中,您就可以让本地分支$branch跟踪远程分支源/$BRANCCH,就像这样。

鉴于$BRANCH和origin/$BRANCCH存在,并且您当前尚未签出$BRANCH(如果有,请切换),请执行以下操作:

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

这将重新创建$BRANCH作为跟踪分支。尽管$BRANCH已经存在,但-f强制创建--如果使用了通常的默认值(即git-config参数branch.atosetupmerge为true),则跟踪是可选的。

注意,如果origin/$BRANCH还不存在,您可以通过将本地$BRANCCH推入远程存储库来创建它,方法是:

git push origin $BRANCH

然后是上一个命令,将本地分支提升为跟踪分支。

确保您运行:

git config push.default tracking

能够顺利推进

如果运行后出现“错误:请求的上游分支'origin/foo'不存在”:

git branch -u origin/foo

确保原点确实有一个foo分支。确保remote.origin.fetch变量设置为+refs/heads/*:refs/remotes/origin/*:

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

运行git fetch-v。您应该看到git从origin/foo更新:

$ git fetch -v
From github.com:davidhcefx/test
 * [new branch]      foo             -> origin/foo
 = [up to date]      master          -> origin/master

成功后,git branch-avv将显示方括号,表示跟踪的远程分支:

$ git branch -u origin/foo
branch 'foo' set up to track 'origin/foo'.
$ git branch -avv
* foo                            92c5ada [origin/foo] Initial commit
  master                         92c5ada [origin/master] Initial commit

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

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

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

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

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

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

2-使用gitbranch-a显示远程和本地分支,请参见以下屏幕截图

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

git签出分支名称

例子:

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

gitbranch—设置nameOfRemoteBranch的上游

N.B:nameOfRemoteBranch:从步骤2“gitbranch-r”的输出中复制

使用示例: