如何在git中创建一个基于远程分支的分支

时间:2016-01-29 07:00:12

标签: git

远程仓库有一个在本地仓库中不存在的分支。我需要获取它并开始使用它而不将其与我拥有的任何其他分支合并。我该怎么办?

5 个答案:

答案 0 :(得分:1)

您只需输入:

即可
git fetch <remote>

从遥控器中获取所有引用,

git checkout <remote>/<branch>

允许您将您的遥控器分支签出到“匿名”分支

git checkout -b <new_local_branch>

根据您检出的远程分支创建本地分支。

您也可以将远程分支设置为上游:

git branch --set-upstream-to=<remote/branch> <new_local_branch>

答案 1 :(得分:1)

TL; DR版本

git fetch remote; git checkout branch

历史

git设计师似乎让这个故意令人困惑,但实际上混淆是由于git采用的进化路径。

在过去的日子里(在git版本1.5之前),您只需直接从另一个存储库中取出分支,每次都输入存储库的完整URL。正如您可能想象的那样,在长存储库路径中输入一直变得很快。有一堆中间解决方案,然后有人提出了远程的想法:像origin这样的简短名称,你可以用来存储你可能想知道的关于其他git的一切库中。

与遥控器一起远程跟踪分支。这里的想法是,如果你的git通过互联网电话调用另一个git并花一些时间与它聊天并检索一大堆新东西,那么在你自己的存储库中收集一个< em>他们为您提供的每个分支以及那些提交的分支。这些是您的远程跟踪分支:origin/masterorigin/develop,依此类推。

每当你运行git fetch origin你的git打电话给他们的git时,拿起他们提供的任何新提交,并将所有他们的分支松散为origin/branch。如果您以前没有,那么现在就做。

签出远程跟踪分支

现在,您可以签出远程跟踪分支,但您无法远程跟踪分支

$ 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 branch将从当前提交开始创建并将您置于新的本地分支上。这很好,但这意味着你必须先检查远程跟踪分支。或者,您可以告诉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。默认情况下,它们在当前分支上运行,如果指定一个,则在本地分支上运行,并设置本地分支要跟踪的其他分支的名称(对于--set-upstream-to),或者停止本地分支跟踪设置为跟踪的任何内容(对于--unset-upstream)。这些使用单词“upstream”而不是短语远程跟踪分支,这是合理的,因为您可以将上游设置为另一个本地分支。这就是你跟踪另一个分支的方式(无论它是否是远程跟踪分支)。

有一个本地分支跟踪其他分支有什么用呢?为什么要这么麻烦?

它允许git rebasegit merge知道要重组或合并的内容,这样您就不必再次输入;并且它允许git status计算您在本地分支上具有的提交,而另一个分支没有(例如ahead 3)和/或它们没有(例如,{{ 1}})。换句话说,这只是为了方便。它 非常方便。它味道不错对你有好处!

答案 2 :(得分:0)

我不是git专家,但我想你可以切换到所需的分支,拉动它,然后从中创建新分支。
换句话说:

git checkout remote_branch
git pull
git checkout -b new_branch

要获取远程分支,您可以使用:

git fetch remote_name

其中 remote_name 是正在使用的远程的名称,例如 origin

答案 3 :(得分:0)

我发现了一种方法。这一个命令就是这样做的:

git fetch remote branch_name:branch_name

答案 4 :(得分:0)

这个Git checkout -b new_branch创建了一个新的名称分支&#39; new_branch&#39;

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>

referance