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

rev*_*alf 850 git git-workflow git-flow git-branch

我有两个分支:masterdev

我想从dev分支创建一个"功能分支" .

目前在分支开发,我做:

$ git checkout -b myfeature dev
Run Code Online (Sandbox Code Playgroud)

... (一些工作)

$ git commit -am "blablabla"
$ git push origin myfeature
Run Code Online (Sandbox Code Playgroud)

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

--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**
Run Code Online (Sandbox Code Playgroud)

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

我做错了什么?

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

所有这些都在分支模型中,就像这里描述的那样.

Abi*_*ern 1233

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

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

但要回答你的问题:

$ git checkout -b myFeature dev
Run Code Online (Sandbox Code Playgroud)

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

$ git commit -am "Your message"
Run Code Online (Sandbox Code Playgroud)

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

$ git checkout dev
$ git merge --no-ff myFeature
Run Code Online (Sandbox Code Playgroud)

现在将更改推送到服务器

$ git push origin dev
$ git push origin myFeature
Run Code Online (Sandbox Code Playgroud)

你会看到你想要它.

  • 将`myFeature`与`dev`合并后,重要性是什么? (23认同)
  • 为了澄清其他新手,[这是`--no-ff`合并的样子](https://i.stack.imgur.com/FMD5h.png) (20认同)
  • 是`git checkout -b myFeature dev`与这3个命令相同:`git checkout dev`,然后`git branch myFeature`,然后`git checkout myFeature`? (11认同)
  • @spartacus如果`myFeature`分支在合并之前被推送到服务器,那么什么也没有.但是,如果`myFeature`尚未推送到服务器并且您希望它出现在服务器中,则必须将其推送到appart. (2认同)
  • 它应该是,或应该是.你看到了不同的东西吗? (2认同)

Pra*_*rge 347

如果要从Git中的任何现有分支创建新分支,只需按照选项操作即可.

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

  • 开发
  • BRANCH1

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

  1. 结帐或更改为"branch1"

    git checkout branch1
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在,创建名为新分支"subbranch_of_b1"下的"BRANCH1"使用下面的命令.

    git checkout -b subbranch_of_b1 branch1
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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

将subbranch_of_b1推送到远程

 git push origin subbranch_of_b1 
Run Code Online (Sandbox Code Playgroud)

  • @ user269867:"git push origin subbranch_of_b1"将为您完成这项工作. (11认同)
  • 我来到这里想知道`git checkout -b some-branch`是否是`git checkout -b some-branch master`的简写.事实证明,`git checkout -b some-branch`是`git checkout -b some-branch <current_active_branch>的缩写. (7认同)
  • 如何将subbranch_of_b1推送到远程? (6认同)
  • 现在,如果我将更改推送到master,更改会自动在branch1中发生吗? (4认同)
  • *注意上面命令中的branch1不是强制性的,因为HEAD当前指向它,如果你在不同的分支上你可以精确它*这就是我正在寻找的 (2认同)
  • @坦率。“&lt;current_active_branch&gt;”的默认设置有时让我陷入困境,因此我个人的偏好是拼出源分支!Aka,我的假设有时很糟糕。 (2认同)

Gna*_*r S 35

创建一个分支

  • 签出主分支时创建分支.这里的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

  • 此外,在重命名分支后,使用 git push origin :old-name new-name 删除旧名称远程分支并推送新名称本地分支。 (2认同)

Sum*_*ade 23

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

git checkout -b <sub-branch> branch
Run Code Online (Sandbox Code Playgroud)

例如:

  • 要创建的新分支的名称 'XYZ'
  • 必须在其下创建 XYZ 的分支 ABC 的名称
git checkout -b XYZ ABC
Run Code Online (Sandbox Code Playgroud)


Too*_*bel 13

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

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

*-----*Dev-------*Feature
Run Code Online (Sandbox Code Playgroud)

       /----*DevB
*-----*DevA
       \----*FeatureC
Run Code Online (Sandbox Code Playgroud)


Dar*_*hit 10

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

假设

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

步骤

  1. 将分支提取到您的本地机器上。

    $ git fetch origin BranchExisting : BranchExisting
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    $ git checkout BranchExisting
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您现在位于 BranchExisting。现在从这个现有分支创建一个新分支。

    $ git checkout -b BranchMyNew
    
    Run Code Online (Sandbox Code Playgroud)

干得好!


Gab*_*les 9

从另一个分支在 git 中创建分支的各种方法:

这个答案增加了一些额外的见解,在现有的答案中没有出现,只是关于问题本身的标题从另一个分支在 Git 中创建一个分支),但没有解决已经有足够答案的问题的更狭窄的细节这里。

我添加这个是因为我现在真的需要知道如何做下面的#1(从我没有签出的分支创建一个新分支),而且如何做并不明显,谷歌搜索导致到这里作为顶部搜索结果。所以,我将在这里分享我的发现。如果有的话,这里的任何其他答案都没有很好地触及这一点。

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

1. 要从您尚未签出的分支创建新分支:

创建branch2branch1当你有任何检出的所有分支(例如:假设你已经master签出):

git branch branch2 branch1
Run Code Online (Sandbox Code Playgroud)

一般格式为:

git branch <new_branch> [from_branch]
Run Code Online (Sandbox Code Playgroud)

man git branch如下所示。我叫<new_branch>他们叫<branchname>什么,我叫[from_branch]他们叫什么[<start-point>]

git branch [--track | --no-track] [-l] [-f] <branchname> [<start-point>]
Run Code Online (Sandbox Code Playgroud)

2. 要从您已经签出的分支创建一个新分支:

git branch new_branch
Run Code Online (Sandbox Code Playgroud)

这非常适合在变基、压缩、硬重置等之前进行备份——在做任何可能严重破坏分支的事情之前。

例如:我在feature_branch1,我即将使用git rebase -i master. 如果我想“撤消”这个,让我们先备份这个分支!我做这一切...THE...TIME并且发现它超级有用和安慰知道我总是可以很容易地回到这个备份分支并重新分支它以防止我feature_branch1在这个过程中搞砸了:

git branch feature_branch1_BAK_20200814-1320hrs_about_to_squash
Run Code Online (Sandbox Code Playgroud)

20200814-1320hrs部分是格式的日期和时间YYYYMMDD-HHMMhrs,因此将是 2020 年 8 月 14 日的 13:20 小时(下午 1:20)。这样我就可以轻松找到我的备份分支,直到我确定我准备好了删除它们。如果你不这样做并且你搞砸了,你必须使用git reflog在搞砸之前去找到你的分支,这要困难得多,压力更大,更容易出错。

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

git checkout -b new_branch
Run Code Online (Sandbox Code Playgroud)

为了使那里发生的事情一目了然,请知道上面的这个命令等效于这两个单独的命令:

git branch new_branch
git checkout new_branch
Run Code Online (Sandbox Code Playgroud)

4. 重命名分支

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

git branch -m <old_name> <new_name>
Run Code Online (Sandbox Code Playgroud)

man git branch 显示如下:

git branch (-m | -M) [<oldbranch>] <newbranch>
Run Code Online (Sandbox Code Playgroud)

示例:让我们重命名branch_1branch_1.5

git branch -m branch_1 branch_1.5
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案。其他答案令人困惑,因为他们倾向于使用“git checkout”同时专注于分支和切换到创建的分支。 (3认同)

Lal*_*kya 6

这将从当前分支创建新分支:

git checkout -b your_new_branch_name 
Run Code Online (Sandbox Code Playgroud)

如果你想创建现有分支的 new_branch 那么:

git checkout -b your_new_branch_name existing_branch_name
Run Code Online (Sandbox Code Playgroud)


JSO*_*C11 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

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

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


归档时间:

查看次数:

986111 次

最近记录:

5 年,9 月 前