繁体   English   中英

如何从不同分支中的特定提交创建分支

[英]How to create the branch from specific commit in different branch

我在master分支中做了几次提交,然后将它们合并到dev分支。

我想从dev分支中的特定提交创建一个分支,它首先在master分支中提交。

我使用了命令:

git checkout dev
git branch  <branch name> <commit id>

但是,这会从master分支创建分支,而不是我期望的dev分支。 master分支和dev分支中的commit id相同。 那么,我如何区分不同分支中的相同提交ID?

PS:我在github上做了一个例子https://github.com/RolandXu/test_for_branch

我使用了命令:

git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8

我期望的是测试分支包含aa.txt bb.txt cc.txt。 但是,测试分支仅包含aa.txt和cc.txt。 它很可能是从主分支创建了分支。

如果您使用这种形式的branch命令(带起点),则HEAD位置无关紧要。

你在做什么:

git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
  • 首先,将HEAD设置为分支dev

  • 其次,在commit 07aeec98上启动一个新分支。 此提交中没有bb.txt(根据您的github repo)。

如果要在刚刚签出的位置启动新分支可以运行没有起始点的分支:

git branch test

或者像其他人一样,在一次操作中分支和结账:

git checkout -b test

我认为你可能会因为07aeec98是分支dev一部分而感到困惑。 确实,这个提交是dev的祖先,它需要进行更改以达到dev的最新提交。 但是,它们是达到最新dev所需的其他提交,这些不一定是07aeec98的历史。

8480e8ae (您添加bb.txt的地方)不在07aeec98的历史记录中。 如果从07aeec98分支,则不会得到8480e8ae引入的8480e8ae

换句话说:如果将分支A和分支B合并到分支C中,然后在提交A时创建新分支,则不会获得B中引入的更改。

在这里,你有两个并行分支master和dev,你在dev中合并。 从master的提交(比合并更早)分支将不会为您提供dev的更改。


如果要将master中的新更改永久集成到功能分支中,则应将master合并到其中并继续。 但是,这将在您的功能分支中创建合并提交。

如果您尚未发布功能分支,则还可以在更新的主分支上重新定义它们: git rebase master featureA 准备好解决可能的冲突。

如果您想要一个工作流程,您可以在其中处理没有合并提交的功能分支,并且仍然可以与master中的较新更改集成,我建议您执行以下操作:

  • 将每个新功能分支基于master的提交
  • 在master的提交上创建一个dev分支
  • 当您需要查看功能分支如何与master中的新更改集成时,将master和feature分支合并到dev

不要直接提交到dev ,只将它用于合并其他分支。

例如,如果您正在处理功能A和B:

a---b---c---d---e---f---g -master
    \       \
     \       \-x -featureB
      \
       \-j---k -featureA

将分支合并到dev分支以检查它们是否与新主服务器配合良好:

a---b---c---d---e---f---g -master
    \       \            \
     \       \            \--x'---k' -dev
      \       \             /    /   
       \       \-x----------    /    -featureB
        \                      /
         \-j---k--------------- -featureA

您可以继续处理功能分支,并定期将主数据库和功能分支的新更改合并到dev

a---b---c---d---e---f---g---h---i----- -master
    \       \            \            \
     \       \            \--x'---k'---i'---l' -dev
      \       \             /    /         /
       \       \-x----------    /         /  -featureB
        \                      /         /  
         \-j---k-----------------l------ -featureA

当需要集成新功能时,将功能分支(不是dev !)合并到master中。

您的参数顺序错误:

git branch <branch-name> <commit>

为此,检查哪个分支并不重要; 它会做你说的。 (如果省略commit参数,则默认在与当前参数相同的位置创建分支。)

如果要在创建时检出新分支:

git checkout -b <branch> <commit>

如果省略commit参数,则具有相同的行为。

你必须做:

git branch <branch_name> <commit>

(您正在交换分支名称并提交)

或者你可以这样做:

git checkout -b <branch_name> <commit>

如果代替您使用分支名称,您将从分支的末端获得分支。

尝试

git checkout <commit hash>
git checkout -b new_branch

提交应该只在树中存在一次,而不是在两个单独的分支中存在。

这允许您检查特定的提交并为其命名。

你可以在本地提到这一点

git checkout -b <branch-name> <sha1-of-commit>

或者,您可以在github中执行此操作,请按照以下步骤操作:

1-在存储库中,单击“ Commits

2-在要分支的提交上,单击<>以在历史记录中的此时浏览存储库。

承诺历史

3-单击tree: xxxxxx左上角的tree: xxxxxx 只需键入一个新的分支名称,单击Create branch xxx ,如下所示。

创建新的分支

现在,您可以在本地从该分支获取更改并从那里继续。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM