我知道如何建立一个跟踪远程分支的新分支,但**如何让一个现有的分支跟踪一个远程分支?
我知道我可以直接编辑.git/config
文件,但似乎应该有一个更简单的方法。
给定一个分支 "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
注:
git fetch upstream
。你可以做以下事情(假设你已经在master上签出,并想推送到远程分支master上)。
设置'远程',如果你还没有设置的话
git remote add origin ssh://...
现在配置主站,让它知道要跟踪。
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
。
git-branch
命令也能理解--set-upstream
,但它的使用可能会让人困惑。
1.8.0版本][1]修改接口。
git branch --set-upstream
已被废弃,可能会在比较远的将来被删除。git 分支 [-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
你可能会发现 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
我相信早在 Git 1.5.x 时,你就可以让本地分支$BRANCH
跟踪远程分支origin/$BRANCH
,像这样。
鉴于$BRANCH
和origin/$BRANCH
已经存在,而且你目前还没有签出$BRANCH
(如果签出了就换掉),请这样做。
git branch -f --track $BRANCH origin/$BRANCH
这将重新创建$BRANCH
作为一个跟踪分支。
尽管$BRANCH
已经存在,但-f
会强制创建。
--track'是可选的,如果通常的默认值已经到位(即 git-config 参数
branch.autosetupmerge`为真)。
请注意,如果 origin/$BRANCH
还不存在,你可以通过将本地的 $BRANCH
推送到远程仓库来创建它。
git push origin $BRANCH
按照前面的命令,将本地分支晋升为跟踪分支。
1-使用.NET技术更新你的本地元数据。 git fetch --all
[![在此输入图像描述][1]][1]
2-使用.NET技术显示你的远程和本地分支 git branch -a 请看下面的截图
[![在此输入图像描述][2]][2]
3-切换到目标分支,你想与远程连接。 使用
git checkout branchName
例如:
[![在此输入图片描述][3]][3] 。
4- 使用以下方法将本地分支与远程分支连接起来。
git branch --set-upstream-to nameOfRemoteBranch。
注:远程分支机构名称:名。 nameOfRemoteBranch** 。 从第 2 步的输出中复制 " git branch -r "
使用示例。
[![在此输入图片描述][4]][4] 。
[1]: http://i.stack.imgur.com/UBUNn.png [2]: http://i.stack.imgur.com/J1xB9.png [3]: http://i.stack.imgur.com/WeBwL.png [4]: http://i.stack.imgur.com/arZFk.png
对于 1.6.x,可以使用 [git_remote_branch][1] 工具来完成。
grb track foo upstream
这将导致 Git 让 foo 追踪
upstream/foo`。
我使用了以下命令(假设你的本地分支名称是" branch-name-local" 而远程分支名称为"branch-name-remote")。)
$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local
如果本地分支和远程分支的名称相同,那么只需进行以下操作。
$ git branch --set-upstream-to=origin/branch-name branch-name
git checkout --track <remote-branch-name>
。
git fetch && git checkout <branch-name>
。
在这里,使用github
和git 2.1.4版
,只需做。
$ git clone [email protected]:user/repo.git
而远程是由itelsef来的,即使没有链接到本地。
$ 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)
但当然,还是没有在当地设立分支机构。
$ git branch
* master <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
看到了吗? 现在只要你结账开发,它就会自动完成。
$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
这么简单!
总结.运行这2个命令即可。
$ git clone [email protected]:user/repo.git
$ git checkout develop
这不是对这个问题的直接回答,但我想在这里为任何可能与我有同样问题的人在试图配置上游分支时留下一个说明。
要警惕push.default。
在旧的git版本中,默认是matching,这将导致非常不理想的行为,如果你有,例如。
本地分支 "master" 追踪到 origin/master
远程分支"上游"。 追踪到上游/主分支
如果你试图在"git push"。 分支时,如果你试图用push.default matching来合并本地分支"master"。 分支上,在push.default匹配的情况下,git会自动尝试将本地分支"master" 合并到"upstream/master"中,从而造成大量的混乱。
这样一来,就有了更合理的行为。
git config --global push.default upstream(上游)
在一个有点相关的方式,我试图添加一个远程跟踪分支到一个现有的分支上,但是在我想添加远程跟踪分支的系统上没有访问该远程仓库的权限(因为我经常通过偷偷网导出这个repo的副本到另一个有权限推送到远程的系统)。
我发现没有办法在本地系统上强制添加一个还没有被获取的远程分支(所以本地系统不知道远程系统上存在该分支,我会得到错误信息。
the requested upstream branch 'origin/remotebranchname' does not exist
)。
最后,我通过在.git/refs/remotes/origin/remotebranchname
处添加一个新的头文件,然后将ref(眼看是最快的,因为它是蹩脚的;-)从可以访问origin repo的系统复制到工作站上(在本地 repo上添加远程分支)。
一旦完成,我就可以使用`git branch --set-upstream-to=origin/remotebranchname'来完成。
或者干脆用:
如果您还没有进入该分支,请切换到该分支。
[za]$ git checkout branch_name
运行
[za]$ git branch --set-upstream origin branch_name
Branch origin set up to track local branch brnach_name by rebasing.
你准备好了吗?
[za]$ git push origin branch_name
你可以 alawys 看一下配置文件,看看哪些是通过运行来跟踪的。
[za]$ git config -e
It's also nice to know this, it shows which branches are tracked and which ones are not. |
---|
[za]$ git remote show origin