Git获取远程分支
我和我的同事正在研究同一个存储库,我们已经将它分成两个分支,每个分支在技术上适用于不同的项目,但是它们有相似之处,所以我们有时想要从分支中重新提交给* master。
不过,我有分支,我的同事怎能具体拉那个分支。 回购的git clone
似乎并没有为他在本地创build分支,尽pipe我可以看到他们在推动我的结束后依然活着。
另外,当我最初做分支时,我做了-b checkout
。 不知道这是否有很大的不同?
iMac:test_solar dave$ git branch -r origin/HEAD -> origin/master origin/daves_branch origin/discover origin/master git fetch origin discover git checkout discover
这是我跑的命令。 但绝对不行。 我希望能够检查出该分支,然后推送并恢复来自各个协作者或工作站的分支更改。
您需要创build一个跟踪远程分支的本地分支。 以下命令将创build一个名为daves_branch的本地分支,用于跟踪远程分支origin / daves_branch 。 当你推动你的更改远程分支将被更新。
对于大多数版本的git:
git checkout --track origin/daves_branch
--track
是git checkout -b [branch] [remotename]/[branch]
缩写git checkout -b [branch] [remotename]/[branch]
在这种情况下[remotename]是原点 ,[branch]是两个相同的daves_branch 。
对于git 1.5.6.5,你需要这个:
git checkout --track -b daves_branch origin/daves_branch
对于git 1.7.2.3和更高版本,这已经足够了(可能已经开始了,但是这是我能够快速find的最早的确认):
git checkout daves_branch
请注意,使用最近的git版本,这将不会创build一个本地分支,并将把你置于“分离的HEAD”状态。 如果你想要一个本地分支,使用--track
选项。 全部细节在这里: http : //git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches
我已经使用了fetch
然后checkout
…
git fetch <remote> <rbranch>:<lbranch> git checkout <lbranch>
…其中<rbranch>
是远程分支或源代码 , <lbranch>
是您想要跟踪的目前尚不存在的本地分支或目标引用 ,您可能想要将其命名为远程分支或源代码引用。 这在<refspec>
的解释中的选项中进行了解释。
Git是如此聪明,它会自动完成第一个命令,如果我在远程分支的前几个字母之后选项卡 。 IE:我甚至不需要命名本地分支,Git自动为我复制远程分支的名字。 感谢Git!
同样, 在这个类似的SOpost中的答案显示,如果你不fetch
本地分支的名字,当你使用-b
标志签出时,你仍然可以创build它。 IE: git fetch <remote> <branch>
接着是git checkout -b <branch> <remote>/<branch>
与我的初始答案完全一样。 显然,如果你的回购只有一个远程,那么你可以在fetch
后做git checkout <branch>
,它会为你创build一个本地分支。 EG:您刚刚克隆了一个回购站,想要查看远程的其他分支。
我相信一些fetch
的文档可能已经逐字从pull
。 特别是选项中的<refspec>
部分是相同的。 但是,我不相信fetch
会merge
,所以如果你离开冒号的目标端,空的fetch
应该什么也不做 。
注意: git fetch <remote> <refspec>
是git fetch <remote> <refspec>
的缩写,因此git fetch <remote> <tag>
与git fetch <remote> <tag>:<tag>
应该在本地复制远程<tag>
。
我想这只是有用的,如果你想在本地复制远程分支,但不一定马上检查出来。 否则,我现在将使用上面所接受的答案 ,这在结账说明的第一部分中详细解释,稍后在--track
的解释下的选项部分中详细解释,因为它是--track
的。 那么…一个1class轮,因为你仍然必须先运行git fetch <remote>
。
FYI: <refspecs>
(source:destination)的顺序解释了用于删除远程分支的奇怪的Git-1.7前置方法。 IE浏览器:什么都不推送到目的地refspec。
如果您试图“签出”一个新的远程分支(只存在于远程,而不是本地),那么您需要:
git fetch origin git checkout --track origin/<remote_branch_name>
这假定你想从原点获取。 如果不是,请用您的远程名称replace原点 。
检查远程存在myBranch而不是本地 – 这对我工作:
git fetch --all git checkout myBranch
我得到这个消息:
Branch myBranch set up to track remote branch myBranch from origin Switched to a new branch 'myBranch'
标题和问题是困惑的:
- Git获取远程分支
- 我的同事怎么能专门拉那个分支。
如果问题是我怎么能得到一个远程分支工作或如何检查一个远程分支,一个更简单的解决scheme是:
使用git(> = 1.6.6),你可以使用:
git checkout <branch_name>
如果没有find本地的<branch_name>
但是在一个具有匹配名称的远程机器中确实存在跟踪分支,则视为等同于:
git checkout -b <branch_name> --track <remote>/<branch_name>
请参阅git checkout的文档
对于你的朋友:
$ git checkout discover Branch discover set up to track remote branch discover Switched to a new branch 'discover'
使用git branch -a
(本地和远程分支)或git branch -r
(仅远程分支)查看所有的远程和他们的分支。 然后你可以做一个git checkout -t remotes/repo/branch
到远程并创build一个本地分支。
还有一个git ls-remote命令可以查看该远程的所有参考和标签。
git checkout -b serverfix origin/serverfix
这是一个常见的操作,git提供了–track简写:
git checkout --track origin/serverfix
事实上,这是很常见的,甚至有捷径的捷径。 如果您尝试结帐的分行名称(a)不存在,并且(b)只与一个远程名称完全匹配,则Git将为您创build一个跟踪分支:
git checkout serverfix
要使用不同于远程分支的名称设置本地分支,您可以轻松使用具有不同本地分支名称的第一个版本:
git checkout -b sf origin/serverfix
现在,您的本地分支sf将自动从origin / serverfix拉出。
资料来源: Pro Git 2nd Edition,由Scott Chacon和Ben Straub撰写 (剪切以提高可读性)
git fetch git branch -r git checkout <branch_name>
您也可以一次获取并签出远程分支: –
git fetch && git checkout the-branch-name
我input了
git checkout <branch_name>
得到了
Branch <branch_name> set up to track remote branch <branch_name> from origin. Switched to a new branch '<branch_name>'
有时候,你被要求不要捣鼓主分支,只工作在远程分支(就像我被要求)。 所以你需要的是远程分支。
所以要单独克隆远程分支(没有主分支),就这样做
git clone url --branch remote_branch_name
其中,remote_branch_name是远程分支的名称
例如,
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15
这将确保您使用远程分支的名称将远程分支克隆到本地分支。
现在,如果您提交代码并推送,代码将单独提交给该分支。
步骤如下:
-
git fetch origin
或git fetch --all
,这将会把所有的远程分支提取到你的本地,然后这是你可以使用的第二个选项。 -
git checkout --track origin/<The_remote_branch you want to switch over>
然后在这个分支上工作,你可以通过input来validation你是否在该分支上
git branch
它显示你当前的分支。
如果你已经知道你的远程分支是这样的…
git remote => One => Two
你知道你想结账的分行名称。 br1.2.3.4然后做
git fetch One => returns all meta data of remote ie the branch name in question.
剩下的就是结账分行
git checkout br.1.2.3.4
然后制作任何新的分支。
你用'git pull'来保持你的分支。 因为“lbranch”和“rbranch”很难破译,所以我将使用实际的repo和分支名称来提供帮助。
让我们使用:
无论你有多less分支机构,你或者任何同事都可以运行这个程序,
git init git pull git@myteam.unfuddle.com:myteam / tlc daves_branch:refs / remotes / origin / daves_branch
检查你的.git/config
,特别是对那个远程的提取进行跟踪。
[remote "randomRemote"] url = git@github.com:someUser/someRepo.git fetch = +refs/heads/*:refs/remotes/randomRemote/*
如果它的heads/*
指向randomRemote/*
,那么当你运行git fetch randomRemote
,它将获取所有的分支。 那么你可以检出这个分支。
除此以外,
-
您需要使用这个远程分支添加到跟踪。 运行后检查你的
.git/config
。 你会明白的。 git remote set-branches –add randomRemote randomBranch -
运行
git fetch randomRemote
。 这将获取远程分支。 -
现在你可以运行
git checkout randomBranch
简单的命令:
git checkout -b'your_branch'origin /'remote branch'
最简单的方法去做,至less对我来说…
git获取原点