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

时间:2010-12-17 12:39:03

标签: git git-branch git-workflow git-flow

我有两个分支: dev

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

目前在分支机构开发中,我做了:

$ git checkout -b myfeature dev

......(有些工作)

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

但是,在对我的树枝进行可视化之后,我得到了:

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

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

我做错了什么?

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

分支模型中的所有内容,例如the one described here

10 个答案:

答案 0 :(得分:1077)

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

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

但要回答你的问题:

$ git checkout -b myFeature dev

在dev上创建MyFeature分支。做你的工作然后

$ git commit -am "Your message"

现在将您的更改合并到dev而不需要快进

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

现在将更改推送到服务器

$ git push origin dev
$ git push origin myFeature

你会看到你想要它。

答案 1 :(得分:300)

如果你想从Git的任何现有分支创建一个新的分支,只需按照选项。

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

  • dev的
  • BRANCH1

因此,如果您想在名为 " branch1&的分支下创建名为 " subbranch_of_b1" 的新分支#34; 按照以下步骤操作:

  1. 结帐或更改为" branch1"

    git checkout branch1
    
  2. 现在使用以下命令在&#34; branch1&#34; 下创建名为&#34; subbranch_of_b1&#34; 的新分支。< / p>

    git checkout -b subbranch_of_b1 branch1
    

    以上将在分支 branch1 下创建一个名为 subbranch_of_b1 的新分支(请注意,上述命令中的branch1不是强制性的,因为HEAD目前指向它,如果你在不同的分支上,你可以精确地说明。)

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

  4. A sample Graphical Illustration Of Creating Branches Under another Branch

    将subbranch_of_b1推送到远程

     git push origin subbranch_of_b1 
    

答案 2 :(得分:26)

创建分支

  • 签出主分支时创建分支。这里的master中的提交将同步到你创建的分支。

    $ git branch branch1

  • 签出branch1时创建分支。这里commit1中的提交将同步到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

答案 3 :(得分:13)

dev分支上同时进行工作。会发生的情况是,在您的场景中,功能分支从dev分支的尖端向前移动,但dev分支不会更改。绘制成直线更容易,因为它可以被认为是向前运动。你在dev上指向A,然后从那里继续沿着平行路径行进。这两个分支并没有真正分歧。

现在,如果你在dev上进行提交,在合并之前,你将再次从同一个提交开始,A,但是现在功能将转到C并且dev转到B.这将显示你试图可视化的分割,因为分支机构现在分歧了。

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

对战

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

答案 4 :(得分:5)

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

看看this的Github博客文章,其中详细介绍了更改:

  

Git 2.23在现有的套件中带来了一对新的实验命令   一个: git switch git restore 。这两个是为了最终   为众所周知的git checkout提供更好的界面。新的   各个命令打算清楚地分开,整齐地划分    git checkout

的职责是什么

答案 5 :(得分:2)

如果要从另一个分支中创建一个分支,请按照以下步骤操作:

假设

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

步骤

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

    $ git fetch origin BranchExisting : BranchExisting
    

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

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

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

    $ git checkout -b BranchMyNew
    

您在这里!

答案 6 :(得分:2)

通过git从另一个分支创建分支的各种方法:

此答案增加了一些额外的见解,而这些见解仅存在于问题本身的 title 中(从另一个分支在Git中创建分支) ,但 not 不能解决问题的较窄细节,而在这里已经有足够的答案了。

我要添加它是因为我现在真的需要知道如何做下面的#1(从一个我尚未签出的分支中创建一个新分支),而且这样做的方式也不明显。 Google搜索导致此处是最佳搜索结果。因此,我将在这里分享我的发现。这里的任何其他答案都没有很好地涉及到这一点。

在此过程中,我还将在下面的常规工作流程中添加其他最常用的git branch命令。

1。要从分支创建新分支,您尚未签出:

在任何已签出的分支(例如:假设您已经签出branch2的情况下,从branch1创建master

git branch branch2 branch1

一般格式为:

git branch <new_branch> [from_branch]

man git branch将其显示为:

git branch [--track | --no-track] [-l] [-f] <branchname> [<start-point>]

2。要从您已签出的分支创建新分支:

git branch new_branch

这非常适合在重新设置基准,压扁,硬重置等之前进行备份-在执行任何可能严重破坏分支机构的操作之前。

例如:我在feature_branch1上,我将使用git rebase -i master将20次提交压缩为1次。万一我想“撤消”,让我们先备份该分支!我这样做 ALL ... THE ... TIME ,并发现我总是可以轻松回到该备份分支并重新分支,这对我非常有帮助和安慰为了在此过程中弄乱feature_branch1的情况下再次尝试:

git branch feature_branch1_BAK_20200814-1320hrs_about_to_squash

20200814-1120hrs部分是日期和时间,格式为YYYYMMDD-HHMMhrs,所以在2020年8月14日应该是13:20hrs(1:20 pm)。这样我就可以轻松地找到我的备份将分支,直到确定可以删除它们为止。如果您不这样做,就会陷入困境,那么必须先使用git reflog来查找分支,然后再把它弄乱,这将变得更加困难,压力更大并且更容易出错。

3。要创建并从您已签出的分支中签出新分支:

git checkout -b new_branch

4。重命名分支

git就像在终端中重命名常规文件或文件夹一样,认为“重命名”更像是'm'ove命令,因此您可以使用git branch -m重命名分支。这是常规格式:

git branch -m <old_name> <new_name>

man git branch如下所示:

git branch (-m | -M) [<oldbranch>] <newbranch>

示例:让我们将branch_1重命名为branch_1.5

git branch -m branch_1 branch_1.5

答案 7 :(得分:1)

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

git checkout -b <sub-branch> branch

例如:

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

答案 8 :(得分:1)

切换到开发分支:

$ git checkout develop

创建开发的feature / foo分支。

$ git checkout -b feature/foo develop

无需快速前进即可合并更改以进行开发

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

现在将更改推送到服务器

$ git push origin develop
$ git push origin feature/foo

答案 9 :(得分:0)

要从另一个分支创建分支,也可以使用以下语法:

git push origin refs/heads/<sourceBranch>:refs/heads/<targetBranch>

比“ git checkout -b” +“ git push origin”要短一些