从另一个分支在Git中创建一个分支


988

我有两个分支:masterdev

我想从dev分支创建一个“功能分支” 。

目前在分支机构dev上,我执行以下操作:

$ git checkout -b myfeature dev

... (一些工作)

$ git commit -am "blablabla"
$ git push origin myfeature

但是,在可视化我的分支之后,我得到了:

--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**

我的意思是分支似乎在ff合并,我不明白为什么...

我做错了什么?

您能否解释一下我如何从另一个分支分支并推回功能分支的远程存储库?

这里描述的那样分支模型中的所有内容。

Answers:


1429

如果您喜欢发布的链接中的方法,请查看Git Flow

这是他为该工作流程创建的一组脚本。

但是要回答你的问题:

$ git checkout -b myFeature dev

从dev创建MyFeature分支。做你的工作,然后

$ git commit -am "Your message"

现在,无需快速前进即可将更改合并到开发人员中

$ git checkout dev
$ git merge --no-ff myFeature

现在将更改推送到服务器

$ git push origin dev
$ git push origin myFeature

然后您会看到它想要的样子。


32
myFeature合并后推送的重要性是什么dev
Alexander Suraphel 2014年

3
@spartacus如果myFeature在合并之前将分支推送到服务器,则不会执行任何操作。但是,如果myFeature尚未将其推送到服务器,并且希望它出现在服务器中,则必须将其推送到appart。
xOneca

13
git checkout -b myFeature dev相同的,因为这些3个命令:git checkout dev,然后git branch myFeature,再git checkout myFeature
凯文·梅雷迪斯

3
是,或者应该是。您看到不同的地方了吗?
阿比森2014年

33
为了澄清其他新手,这就是--no-ff合并的样子
A__18年

406

如果要从Git中的任何现有分支创建新分支,只需遵循这些选项即可。

首先在要创建新分支的分支中更改/签出。例如,如果您具有以下分支,例如:

  • 开发者
  • 分支1

所以,如果你想创建一个名为新分支“subbranch_of_b1”命名的分支下的“BRANCH1”遵循的步骤:

  1. 结帐或更改为“ branch1”

    git checkout branch1
    
  2. 现在,创建名为新分支“subbranch_of_b1”下的“BRANCH1”使用下面的命令。

    git checkout -b subbranch_of_b1 branch1
    

    上面的代码将创建一个名为新的分支subbranch_of_b1分支下BRANCH1(注意,branch1在上面的命令是不是强制性的,因为头是目前指向它,你可以精确的,如果你是在一个不同的分支,虽然)。

  3. 现在,在使用subbranch_of_b1之后,您可以在本地或远程提交并推送或合并它。

在另一个分支下创建分支的示例图形插图

将subbranch_of_b1推送到远程

 git push origin subbranch_of_b1 

7
如何将subbranch_of_b1推到远程?
user269867 '16

13
@ user269867:“ git push origin subbranch_of_b1”将为您完成此工作。
Praveen George

4
现在,如果我将更改推送到master,更改会自动在branch1中发生吗?
尤达大师(Yoda)

2
请注意,上面命令中的branch1不是必需的,因为HEAD当前指向它,如果您在其他分支上,则可以精确调整它,尽管那正是我想要的
felipsmartins

10
我来到这里想知道是否git checkout -b some-branch是速记git checkout -b some-branch master。事实证明,这git checkout -b some-branch是速记git checkout -b some-branch <current_active_branch>
Frank Henard

45

创建一个分支

  • 检出主分支后创建分支。master中的提交将同步到您创建的分支。

    $ git branch branch1

  • 在检出branch1时创建分支。在这里,在branch1中的提交将同步到branch2

    $ git branch branch2


结帐分支

git checkout命令切换分支或还原工作树文件

  • $ git checkout branchname

重命名分支

  • $ git branch -m branch1 newbranchname

删除分支

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete (在不检查合并状态的情况下强制删除

创建和切换分支

  • $ git checkout -b branchname

完全包含的分支

  • $ git branch --merged


************************** 分支差异 [git diff branch1..branch2] ************** **********

多行差异
  • $ git diff master..branch1
单行差异
  • $ git diff --color-words branch1..branch2

1
同样,在重命名分支后,可使用git push origin :old-name new-name删除旧名称的远程分支并推送新名称的本地分支。
95faf8e76605e973

13

dev分支上同时进行工作。发生的情况是,在您的场景中,功能分支从dev分支的顶端向前移动,但是dev分支没有改变。将其绘制为直线更容易,因为可以将其视为向前运动。您将其指向开发人员上的A,然后从那里继续沿着并行路径前进。这两个分支并没有真正分开。

现在,如果您对dev进行提交,则在合并之前,您将再次从同一提交A开始,但是现在功能将转到C,将开发人员转到B。这将显示您要可视化的拆分,作为分支现在分歧了。

*-----*Dev-------*Feature

       /----*DevB
*-----*DevA
       \----*FeatureC

9

Git 2.23引入git switchgit restore划分了git checkout

从git 2.23开始,从现有分支创建一个新分支:

git switch -c my-new-branch

切换到新分支“ my-new-branch”

  • -c--create的缩写,它替换了众所周知的git checkout -b

看看这个 Github博客文章,更详细地解释更改:

Git 2.23为现有的命令集带来了一对新的实验命令:git switchgit restore。这两个目的是最终为众所周知的git checkout提供更好的界面。新命令旨在使每个命令有一个清晰的分隔,整齐地划分出git checkout的许多职责


9

要从本地目录中的另一个分支创建一个分支,可以使用以下命令。

git checkout -b <sub-branch> branch

例如:

  • 要创建的新分支的名称“ XYZ”
  • 必须在其下创建XYZ的分支ABC的名称
git checkout -b XYZ ABC

3

如果要从另一个分支创建分支,请遵循以下步骤:

假设

  1. 您目前在master分支中。
  2. 您没有要提交的更改。(如果您有任何要提交的更改,请隐藏它!)。
  3. BranchExisting是分支的名称,您需要从该分支中​​使用name创建一个新分支BranchMyNew

步骤

  1. 将分支获取到本地计算机。

    $ git fetch origin BranchExisting : BranchExisting
    

此命令将在本地使用相同的分支名称创建一个新分支。

  1. 现在,从主分支结帐到新获取的分支

    $ git checkout BranchExisting
    
  2. 您现在位于BranchExisting中。现在从该现有分支创建一个新分支。

    $ git checkout -b BranchMyNew
    

干得好!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.