如何将分支分为功能分支

时间:2019-06-07 11:42:19

标签: git

我有一个到目前为止尚未使用git的代码库。我做了一个新的分支,做了一些清洁工作。最后三个提交是:

bdd0f42ca51734a10a09985fa65abb81c876432d deleted Feature 2
ef236bb88de9aa4e4839b52b7a5131e437174d48 deleted Feature 1 <-- Feature 2 is still in it
db3be0c46e7e5abc3f234a675424cd92f0dcd78e deleted Garbage <-- Feature 1 and Feature 2 is still in it

当前头是进一步开发的理想起点,即释放,开发和掌握的初始状态。

如何将功能1和功能2保存到两个单独的功能分支中,这些分支以后可以照常合并?

3 个答案:

答案 0 :(得分:1)

您可能会考虑:

git checkout -b feature/2 # create feature/2 branch
git revert bdd0f42

git revert将创建提交bdd0f42的反向提交 因此再次添加功能2

然后选择功能1:

git checkout -b feature/1 bdd0f42 # create feature/1 branch from your HEAD commit
git revert ef236bb

这可能有点棘手;因为Feature1和Feature2之间的代码更改可能会影响相同的文件...

答案 1 :(得分:1)

我假设说“已删除功能X”是指您使用该功能还原了代码。 此外,还原了这些功能后,您还应该提交包含这些功能代码的提交。因此您的提交看起来像(按时间倒序):

(a4s5s2) * deleted Feature 2
         |
(d2r3t4) * deleted Feature 1
         |
(fd32d3) * deleted Garbage
         |
(dt3d23) * added Feature 2
         |
(dw24d1) * added Feature 1
         |
(23d234) * other commits..

用括号括起来的字母数字值是提交ID的最后一部分。

现在解决您的问题的解决方案

  • 使用命令(dw24d1) * added Feature 1提交git checkout dw24d1,然后使用命令git checkout -b feature1

  • 从该提交创建一个新分支
  • 同样,使用命令git checkout main-branch转到主分支,使用命令(dt3d23) * added Feature 1提交git checkout dt3d23,然后使用命令{{1 }}

  • 最后使用命令git checkout -b feature2

  • 返回您在主分支上的最新提交

完成所有这些操作后,您将获得3个分支-主分支(包含最新代码),feature1(包含功能1),feature2(包含功能2)。


编辑:

如前所述,您没有添加功能的提交。 在这种情况下,您只需执行以下操作:(考虑到您最晚是主分支的提交,例如git checkout main-branch

  • 使用命令master为功能1创建新分支,然后在该分支上提交功能1代码
  • 使用命令git checkout -b feature1返回到master分支,然后使用命令git checkout master为功能2创建新分支,然后在该分支上提交功能2代码
  • 使用命令git checkout -b feature2返回至master分支并继续工作。

答案 2 :(得分:1)

假设您有一个new_release分支,最近3次提交

  1. 功能1
  2. 功能2
  3. 功能3。

现在,您已经从feature_1创建了一个新分支(dev)。

您只需通过cherry-pick提交commit Id feature1即可。

您可以在feature_1分支中

 git cherry-pick {commitIdOfFeature1}

此后,您的feature_1将拥有dev的所有提交以及您已指定ID的提交。

通过这种方式,您可以根据您的不同需求创建不同的分支。