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

这个问题在这里已经有了答案:

  • 如何检出远程Git分支? 21个答案

  • 你可以输入:

    git fetch <remote>
    

    从您的遥控器获取所有参考,

    git checkout <remote>/<branch>
    

    可让您将您的遥控器分支结帐到“匿名”分支,

    git checkout -b <new_local_branch>
    

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

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

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

    TL; DR版本

    git fetch remote; git checkout branch

    历史

    git设计师似乎使这个故意混淆,但实际上混乱是由于git所走的进化路径。

    在过去的日子里(在git版本1.5之前),你直接从其他仓库中取出分支,每次输入仓库的完整URL。 正如您可以想象的那样,长时间输入长存储路径的速度一直很快。 有一堆中间溶液后,有人想出了一个遥控器的想法:一个简短的名字一样origin ,你可以用它来存储所有你可能想知道其他的git仓库。

    随着远程遥控跟踪分支。 这里的想法是,如果你的git在互联网电话上调用另一个git并花费一些时间与它聊天并检索一大堆新东西,那么在你自己的存储库中隐藏每一个记忆可能是很好的他们提供给你的分支,以及那些提供的分支。 这些是您的远程追踪分支: 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 - 你仍然可以得到'detached HEAD'消息。)

    创建一个本地分支

    git checkout -b branch将从当前提交开始创建并将您置于新的本地分支上。 这很好,但这意味着你必须首先检查远程跟踪分支。 或者,你可以告诉git checkout -b哪里开始新分支。 但是,你也应该设置它来跟踪(如git所示)另一个分支,这使我们能够:

    从远程跟踪分支创建本地分支

    现在,棘手的一点是,一旦你有了origin/develop (或者其他一些origin/限定的分支名称),即使你还没有一个,你也可以使用同样的名字git checkout出一个普通的本地分支。 。 Git会注意到develop并不是一个分支名称,所以它会扫描所有的远程跟踪分支, origin/develop这种情况下只有一个匹配的名称origin/develop ,并假设您的意思是“请创建一个新的develop和追踪origin/develop以便它最初始于与当前的origin/develop点相同的承诺“。

    (这是一个很常见的事情,需要git人员加入git版本1.6.6。)

    等等,一个本地分支跟踪一个远程跟踪分支?

    是。

    但为什么它不是一个本地跟踪分支?

    “本地”,“远程”和“跟踪”等词语出现的次数太多了,更不用说“分支”这个词的多重含义了。 你想要一个本地跟踪分支来跟踪远程跟踪分支吗? 如果您的本地分支跟踪另一个本地分支会发生什么? :-)(是的,git可以做到这一点。)

    严重的是,这个术语有点奇怪。 它就是这样长大的。

    其他一些事情

    git branch命令有--set-upstream-to--unset-upstream 。 它们默认在当前分支上运行,如果指定了当前分支,则设置本地分支,并设置本地分支要跟踪的另一分支的名称(对于--set-upstream-to ),或者停止本地分支跟踪设置要跟踪的任何内容(对于--unset-upstream )。 这些使用单词“上游”而不是短语远程跟踪分支,这是合理的,因为您可以将上游设置为另一个本地分支。 这就是跟踪其他分支的方式(不管它是否是远程跟踪分支)。

    让本地分支跟踪其他分支有什么好处? 为什么打扰一切?

    它让git rebasegit merge知道重新绑定或合并的内容,这样你就不必再次输入; 它允许git status计数您在本地分支上提交的其他分支没有的提交(例如ahead 3 )和/或他们拥有您没有的提交(例如, behind 12 )。 换句话说,这只是为了方便。 虽然这很方便。 它味道不错,对你有好处!


    我找到了一个方法。 这一个命令是这样做的:

    git fetch remote branch_name:branch_name
    
    链接地址: http://www.djcxy.com/p/3827.html

    上一篇: How to create a branch in git basing it on a remote branch

    下一篇: checkout to remote branch which is fetched locally