我有一个到目前为止尚未使用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保存到两个单独的功能分支中,这些分支以后可以照常合并?
答案 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次提交
现在,您已经从feature_1
创建了一个新分支(dev
)。
您只需通过cherry-pick
提交commit Id
feature1即可。
您可以在feature_1
分支中
git cherry-pick {commitIdOfFeature1}
此后,您的feature_1将拥有dev的所有提交以及您已指定ID的提交。
通过这种方式,您可以根据您的不同需求创建不同的分支。