【发布时间】:2016-05-06 20:10:36
【问题描述】:
远程仓库有一个本地仓库不存在的分支。我需要获取它并开始使用它,而无需将它与我拥有的任何其他分支合并。我该怎么做?
【问题讨论】:
标签: git
远程仓库有一个本地仓库不存在的分支。我需要获取它并开始使用它,而无需将它与我拥有的任何其他分支合并。我该怎么做?
【问题讨论】:
标签: git
git fetch <em>remote</em>; git checkout <em>branch</em>
git 的设计者似乎故意混淆了,但实际上混淆是由于 git 所走的进化路径。
在过去(在 git 版本 1.5 之前),您只是直接从另一个存储库中获取分支,每次都输入存储库的完整 URL。正如您可能想象的那样,一直在输入长存储库路径很快就会过时。有一堆中间解决方案,然后有人提出了 remote 的想法:一个像 origin 这样的短名称,您可以使用它来存储您可能想知道的关于其他 git 存储库的所有信息。
与远程一起出现的远程跟踪分支。这里的想法是,如果你的 git 通过互联网电话调用另一个 git 并花一些时间与它聊天并检索一大堆新东西,那么在你自己的存储库中藏起一个 每个他们提供给你的分支以及那些提交。这些是您的远程跟踪分支:origin/master、origin/develop 等等。
每当您运行 git fetch origin 时,您的 git 都会调用他们的 git,获取他们提供的任何新提交,并以 origin/<em>branch</em> 松鼠所有他们的分支。如果您以前没有,现在就拥有。
现在,您可以签出远程跟踪分支,但不能on远程跟踪分支:
$ git checkout origin/develop
就像找到origin/develop的提交ID一样:
$ git rev-parse origin/develop
39d22b9678b8c571aab6902620c95907d5bef2db
然后将其交给git checkout:
$ git checkout 39d22b9678b8c571aab6902620c95907d5bef2db
Note: checking out '39d22b9678b8c571aab6902620c95907d5bef2db'.
You are in 'detached HEAD' state. ...
(唯一的区别是 git 可以使用名称 origin/develop,如果您将其交给 git checkout,您仍然会收到“分离的 HEAD”消息。)
git checkout -b <em>branch</em> 将创建一个新的本地分支,并从当前提交开始。这很好,但这意味着您必须先检查远程跟踪分支。或者,您可以告诉git checkout -b 从哪里开始新分支。但是你也应该设置它来跟踪(正如 git 所说)另一个分支,这将我们带到:
现在,棘手的一点是,一旦您拥有 origin/develop(或其他一些 origin/ 限定的分支名称),您就可以使用相同的名称 git checkout 一个常规的、普通的本地分支,即使您没有还没有。 Git 会注意到 develop 不是(还)一个分支名称,所以它会扫描你所有的远程跟踪分支并发现有一个匹配的名称——在这种情况下是origin/develop——并假设你的意思是“请创建一个新的develop 并使其跟踪origin/develop,以便它最初以origin/develop 指向的相同 提交开始”。
(这是一个很常见的需求,以至于 git 人员在 git 版本 1.6.6 中添加了它。)
是的。
“本地”、“远程”和“跟踪”这些词已经出现太多次了,更不用说the multiple meanings of the word "branch"了。你想要一个本地跟踪分支来跟踪一个远程跟踪分支吗?如果您的本地分支跟踪另一个 本地 分支会怎样? :-)(是的,git 可以做到。)
说真的,这个术语有点奇怪。就这样长出来了。
git branch 命令有--set-upstream-to 和--unset-upstream。这些默认在当前分支上运行,如果您指定一个,则在本地分支上运行,并设置本地分支要跟踪的 other 分支的名称(对于--set-upstream-to),或者停止本地分支跟踪它设置为跟踪的任何内容(对于--unset-upstream)。这些使用单词“upstream”而不是短语remote-tracking branch,这是合理的,因为您可以将上游设置为另一个本地分支。这就是您跟踪另一个分支的方式(无论它是否是远程跟踪分支)。
它让git rebase 和git merge 知道要基于什么进行rebase 或合并,这样您就不必再次输入;它让git status 计算您在本地分支上的提交,而另一个分支没有(例如ahead 3)和/或他们有您没有的提交(例如,behind 12)。换句话说,这只是为了方便。 不过很方便。味道很好而且对你有好处!
【讨论】:
您只需输入:
git fetch <remote>
从远程获取所有参考,
git checkout <remote>/<branch>
让您将远程分支签出到“匿名”分支,
git checkout -b <new_local_branch>
根据您签出的远程分支创建一个本地分支。
您也可以将远程分支设置为上游:
git branch --set-upstream-to=<remote/branch> <new_local_branch>
【讨论】:
我找到了办法。这个命令可以做到:
git fetch remote branch_name:branch_name
【讨论】:
git fetch <remote>,后跟git checkout <branch>。我会添加一个答案。
我不是git 专家,但我想你可以切换到所需的分支,拉取它,然后从中创建新分支。
换句话说:
git checkout remote_branch
git pull
git checkout -b new_branch
要获取远程分支,您可以使用:
git fetch remote_name
其中remote_name是正在使用的remote的名称,例如origin。
【讨论】:
这个Git checkout -b new_branch 创建了一个名为“new_branch”的新分支
git pull origin remote_branch 将代码从 remote_branch 拉到 new_branch
git checkout -b new_branch
git pull origin remote_branch
你也可以试试
git checkout -b <branch> --track <remote>/<branch>
【讨论】: