我的同事和我在同一个存储库上工作,我们已经将它分成两个分支,每个分支在技术上用于不同的项目,但它们有相似之处,因此我们有时会想要从分支机构返回给* master .
但是,我有分支机构 . 我的问题是,我的同事怎么能专门拉那个分支?回购邮件的 git clone
似乎并没有为他本地创建分支,尽管我可以看到他们在推动我的结束之后生活在一团糟 .
此外,当我最初创建分支时,我做了 -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
这些是我运行的命令 . 但它绝对不起作用 . 我希望能够检查该分支,然后推送并提交来自各个协作者或工作站的分支更改 .
25 回答
是什么帮助了我
1)查看所有可用的远程分支(例如'remote-branch-name')
2)使用远程分支名称创建本地分支
步骤如下;
git fetch origin
或git fetch --all
,这将获取到本地的所有远程分支,然后这是您可以使用的第二个选项 .git checkout --track origin/<The_remote_branch you want to switch over>
然后在这个分支上工作,你可以通过输入来验证你是否在那个分支上
它显示您当前所在的分支 .
假设你的遥控器是git@xyz.git,你想要它的random_branch分支 . 该过程应如下:
本地分支my_copy_random_branch将跟踪远程的random_branch分支 .
如果您有一个使用--depth 1克隆的存储库,则列出的许多命令将不起作用 . 例如,请看这里
在这种情况下,我会重新回复回购,但也许还有其他技术,例如git shallow clone (clone --depth) misses remote branches
这是一个很常见的操作,git提供了--track简写:
事实上,这种情况非常普遍,甚至还有一条捷径 . 如果您尝试签出的分支名称(a)不存在,并且(b)只与一个遥控器上的名称完全匹配,Git将为您创建跟踪分支:
要设置名称与远程分支不同的本地分支,可以轻松地使用具有不同本地分支名称的第一个版本:
现在,您的本地分支sf将自动从origin / serverfix中提取 .
来源:Pro Git 2nd Edition, written by Scott Chacon and Ben Straub(为便于阅读而削减)
如果你已经知道你的远程分支......
而且你知道你想结账的分行名称 . br1.2.3.4 然后呢
剩下的就是检查分支机构
然后从中创建任何新分支 .
一个简单的命令 - “git checkout remote_branch_name”将帮助您创建一个包含远程分支中所有更改的本地分支 .
您需要创建一个跟踪远程分支的本地分支 . 以下命令将创建名为 daves_branch 的本地分支,跟踪远程分支 origin/daves_branch . 推送更改时,将更新远程分支 .
对于最新版本的git:
--track
是git checkout -b [branch] [remotename]/[branch]
的简写,其中[remotename]在这种情况下是 origin 而[branch]是两倍相同,在这种情况下是 daves_branch .对于git 1.5.6.5,你需要这个:
对于git 1.7.2.3及更高版本,这已经足够了(可能已经提前开始,但这是我能尽快找到的最早确认):
请注意,对于最近的git版本,此命令不会创建本地分支,并且会使您处于'detached HEAD'状态 . 如果需要本地分支,请使用
--track
选项 . 详细信息:http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches使用
git branch -a
(本地和远程分支)或git branch -r
(仅远程分支)查看所有远程及其分支 . 然后,您可以对远程执行git checkout -t remotes/repo/branch
并创建本地分支 .还有一个git ls-remote命令可以查看该远程的所有引用和标记 .
我打字了
得到了
git fetch && git checkout <your friend's branch name>
应该做的伎俩git branch <name> --track origin/<name>
最简单的方法,至少对我来说:
检查远程存在而不是本地存在的myBranch - 这对我有用:
我收到了这条消息:
如果您正在尝试“签出”新的远程分支(仅存在于远程分支,但不存在于本地),这就是您需要的:
这假设您要从原点获取 . 如果没有,请用您的远程名称替换origin .
git fetch --all & git checkout <branch name>
有了这个简单的命令:
你使用'git pull'来保持你的分支分开 . 我将使用实际的回购和分支名称来帮助,因为'lbranch'和'rbranch'很难破译 .
我们来使用:
myteam.unfuddle.com =远程git服务器
tlc =存在回购的虚拟项目帐户
daves_branch =远程分支名称
无论有多少个分支,您或任何同事都可以运行此操作来仅提取您的分支:
检查
.git/config
,特别是该遥控器 fetch 上的跟踪 .如果
heads/*
指向randomRemote/*
,则当您运行git fetch randomRemote
时,它将获取所有分支 . 然后你可以检查那个分支 .除此以外,
您需要使用此功能将远程分支添加到跟踪中 . 运行此项后检查
.git/config
. 你会明白的 . git remote set-branches --add randomRemote randomBranch运行
git fetch randomRemote
. 这将获取远程分支 .现在你可以运行
git checkout randomBranch
The title and the question are confused:
Git获取远程分支
我的同事怎么能专门拉那个分支 .
如果问题是我如何获得远程分支以及如何git checkout远程分支,更简单的解决方案是:
使用git(> = 1.6.6),您可以使用:
如果找不到本地
<branch_name>
但在一个具有匹配名称的远程中确实存在跟踪分支,则视为等效于:see documentation for git checkout
为你的朋友:
试试吧
$ git pull origin your_branch_name
您也可以一次性获取和签出远程分支: -
我用fetch后跟checkout ...
...其中
<rbranch>
是远程分支或源ref,<lbranch>
是您想要跟踪的 non-existent 本地分支或目标引用,您可能希望将其命名为远程分支或源ref . 这在_3648670_的解释中在options下解释 .Git is so smart it auto completes the first command if I tab after the first few letters of the remote branch. IE: I don't even have to name the local branch, Git automatically copies the name of the remote branch for me. Thanks Git!
同样如the answer in this similar SO post所示,如果您没有在
fetch
中命名本地分支,则在使用-b
标志检出时仍可以创建它 . IE:git fetch <remote> <branch>
后跟git checkout -b <branch> <remote>/<branch>
与我的初始答案完全相同 . 显然,如果您的仓库只有一个遥控器,那么您可以在fetch
之后执行git checkout <branch>
,它将为您创建一个本地分支 . EG:你刚刚克隆了一个仓库,想要从遥控器上查看额外的分支 .我相信
fetch
的一些文档可能已经从pull逐字复制 . 特别是options中<refspec>
的部分是相同的 . 但是,我不相信fetch
会永远merge,所以如果你离开冒号的目的地一边空fetch
should do nothing .注意:
git fetch <remote> <refspec>
是git fetch <remote> <refspec>:
的缩写,因此无效,但git fetch <remote> <tag>
与git fetch <remote> <tag>:<tag>
相同,后者应在本地复制远程<tag>
.我想这只有在您想在本地复制远程分支时才有用,但不一定要立即检查它 . 否则我现在会使用the accepted answer above,这将在checkout description的第一部分中详细解释,后面在options部分的options部分解释,因为它是1-liner . 嗯......有点像1班轮,因为你仍然必须首先运行
git fetch <remote>
.仅供参考:
<refspecs>
(来源:目的地)的顺序解释了deleting remote branches的奇怪的前Git-1.7方法 . IE:不推送任何内容到目的地refspec .有时会要求您不要使用主分支并仅使用远程分支(正如我被要求的那样) . 所以你需要的只是远程分支 .
因此,要单独克隆远程分支(没有主服务器),请执行此操作
其中,remote_branch_name是远程分支的名称
例如,
这将确保使用远程分支的名称将远程分支克隆到本地分支 .
现在,如果您提交代码并推送,代码将单独提交给该分支 .