Make an existing Git branch track a remote branch?
我知道如何创建跟踪远程分支的新分支,但如何使现有分支跟踪远程分支?
我知道我可以编辑
给定一个分支
从Git 1.8.0开始:
1 | git branch -u upstream/foo |
或者,如果本地分行
1 | git branch -u upstream/foo foo |
或者,如果要键入更长的命令,这些命令相当于上述两个命令:
1 2 3 | git branch --set-upstream-to=upstream/foo git branch --set-upstream-to=upstream/foo foo |
从Git 1.7.0开始:
1 | git branch --set-upstream foo upstream/foo |
笔记:
- 以上所有命令都将使本地分支
foo 从远程upstream 跟踪远程分支foo 。 - 旧的(1.7.x)语法已被弃用,取而代之的是新的(1.8+)语法。新的语法旨在更加直观和易于记忆。
- 定义上游将失败,因为新创建的远程设备尚未获取。在这种情况下,提前运行
git fetch upstream 。
另请参见:为什么我需要一直执行`--set upstream`操作?
您可以执行以下操作(假设您已在主服务器上签出并希望推送到远程分支主服务器上):
如果您还没有"遥控器",请设置它
1 | git remote add origin ssh://... |
现在将master配置为know to track:
1 2 | git config branch.master.remote origin git config branch.master.merge refs/heads/master |
推:
1 | git push origin master |
我这样做是因为使用
1 | $ git push -u origin branch-name |
等价的多头期权是
git branch --set-upstream is deprecated and may be removed in a relatively distant future.git branch [-u|--set-upstream-to] has been introduced with a saner order of arguments.…
It was tempting to say
git branch --set-upstream origin/master , but that tells Git to arrange the local branch"origin/master" to integrate with the currently checked out branch, which is highly unlikely what the user meant. The option is deprecated; use the new--set-upstream-to (with a short-and-sweet-u ) option instead.
假设您有一个本地的
1 2 | $ git branch foo $ git branch --set-upstream-to=origin/foo |
或者只是
1 | $ git branch --set-upstream-to=origin/foo foo |
您可能会发现
1 2 3 4 5 6 7 8 | 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 |
实际上,对于公认的工作答案:
1 2 3 4 5 | git remote add upstream <remote-url> git fetch upstream git branch -f --track qa upstream/qa # OR: git branch --set-upstream qa upstream/qa |
我相信,早在1.5.x吉特,你就可以让一个本地分支机构
鉴于
1 | git branch -f --track $BRANCH origin/$BRANCH |
这将把
注意,如果
1 | git push origin $BRANCH |
然后执行上一个命令,将本地分支提升为跟踪分支。
1-使用:git fetch--all更新本地元数据
2-使用:git branch-a显示远程和本地分支,请参见以下屏幕截图
3-切换到要与远程设备链接的目标分支:使用
Git签出分支名称
例子:
4-使用以下方法将本地分支链接到远程分支:
git branch—设置为上游的name of remotebranch
n.b:nameofremotebranch:从步骤2"git branch-r"的输出复制
使用实例:
确保跑步:
1 | git config push.default tracking |
能够把问题解决
编辑
如果你不想手工处理这个文件(这并不难),你可以一直使用
当然,在使用
非常短
1 | git branch --set-upstream yourLocalBranchName origin/develop |
这将使您的
对于1.6.x,可以使用git_远程_分支工具:
1 | grb track foo upstream |
这将导致git使
这里,使用
1 | $ git clone [email protected]:user/repo.git |
远程设备由ITELSEF提供,即使没有本地链接:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ git remote show origin * remote origin Fetch URL: [email protected]:user/repo.git Push URL: [email protected]: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) |
但当然,仍然没有地方分支机构:
1 2 | $ git branch * master <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
看到了吗?现在,如果您只签出develp,它将自动执行魔法:
1 2 3 | $ git checkout develop Branch develop set up to track remote branch develop from origin. Switched to a new branch 'develop' |
很容易!
总结。只需运行以下两个命令:
1 2 | $ git clone [email protected]:user/repo.git $ git checkout develop |
使用"--track"选项
在
git pull 之后:git checkout --track 或:
git fetch && git checkout
我使用以下命令(假设您的本地分支名称是"branch name local",远程分支名称是"branch name remote"):
1 | $ git branch --set-upstream-to=origin/branch-name-remote branch-name-local |
如果本地和远程分支具有相同的名称,则只需执行以下操作:
1 | $ git branch --set-upstream-to=origin/branch-name branch-name |
为了创建新的分支,我们可以使用以下命令
1 | git checkout --track -b example origin/example |
对于已创建的分支,若要在远程分支之间创建链接,请使用以下命令
1 | git branch -u origin/remote-branch-name |
这不是这个问题的直接答案,但我想在这里为任何人留下一个注释,当我试图配置一个上游分支时,这些人可能与我有相同的问题。
注意push.default。
对于较旧的Git版本,默认值是匹配的,这将导致非常不受欢迎的行为,例如:
本地分支"主"跟踪到源站/主服务器
远程分支"上游"跟踪到上游/主
如果在"上游"分支上尝试"git push",那么与push.default匹配的git会自动尝试将本地分支"master"合并为"上游/master",造成一片混乱。
这会使你的行为更加理智:
git config—全局push.default上游
在某种程度上,我试图将一个远程跟踪分支添加到一个现有的分支,但没有访问我想要在其中添加该远程跟踪分支的系统上的远程存储库(因为我经常通过Sneakernet将此repo的副本导出到另一个可以访问该远程的系统)。我发现没有办法强制在本地添加一个尚未提取的远程分支(因此本地不知道远程存在该分支,我会得到错误:
最后,我通过在
一旦完成,我就可以使用
或者简单地说:
如果您不在分支中,请切换到该分支:
1 | [za]$ git checkout branch_name |
运行
1 2 | [za]$ git branch --set-upstream origin branch_name Branch origin set up to track local branch brnach_name by rebasing. |
你准备好了:
1 | [za]$ git push origin branch_name |
您可以通过运行以下命令查看配置文件,查看跟踪内容的内容:
1 | [za]$ git config -e |
很高兴知道这一点,它显示了哪些分支被跟踪,哪些不被跟踪。:
1 | [za]$ git remote show origin |
对于像我这样只想将本地分支名称与远程分支名称同步的任何人,这里有一个方便的命令:
1 | git branch -u origin/$(git rev-parse --abbrev-ref HEAD) |
这也行
1 | git branch --set-upstream-to=/< remote>/< branch> < localbranch> |