这是一个场景:我已经为代码库创建了一个新的存储库并做了一些提交,但我已经确定该代码库的某些部分应该在它自己的分支而不是master中。如何将该代码分离到另一个分支,以便主人“不知道”它?显然我不能只创建分支然后从master中删除代码,因为从master到新分支的任何后续合并也将删除分支中的代码。
我确信这有一个微不足道的答案,但我想不出应该怎么做:)
答案 0 :(得分:4)
如果你可以修改master(即没有其他人有你要移动到分支的更改),我会使用git rebase -i
重新安排master中的提交,这样所有应该在分支中的提交都是毕竟应该留在主人的承诺。之后,创建分支并重置master,以便它不包含任何分支提交。
例如,如果您有提交(其中B
表示您要移动的提交,M
表示应该保留的提交:
M1---B1---M2---B2---M3
将它们变成
M1---M2---M3---B1---B2
创建新分支,并将git reset --hard
主文件创建为M3
。
如果你不能修改master,请在master上创建你的分支,git revert
你不想要的更改,然后git merge -s ours master
。这有效地告诉分支您知道恢复并且您不希望它在那里。
之后,如果将master合并到分支中,master中的更改将正确合并,但revert不会。更重要的是,如果您确定分支已完成并且您想要合并回主数据库,它也可以正常工作 - 合并所有来自分支的更改,包括已还原的更改。
答案 1 :(得分:1)
你可以通过挑选你想要的提交进入它自己的分支来做到这一点。
在第一次提交私有之前,首先从提交分支出来:
git checkout -b feature1 sha1^ # sha1 is the hash of the first private commit
现在挑选每次提交
git cherry-pick hash1 hash2 etc
现在删除主人
中的相同内容git checkout master
git rebase -i sha1^ # as in the first checkout
现在删除你挑选的提交。
希望这有帮助
答案 2 :(得分:1)
Checkout master,编辑工作目录以删除(或隐藏?)该功能,然后提交。
为“新”功能开发创建一个分支(我将其称为“dev”,但您应该将其命名为有意义的东西)。然后在dev上,恢复(不重置!)之前的提交,撤消你刚才所做的“删除”(或隐藏)工作。将恢复提交到开发分支。
第3步,获利。你现在是一个没有这个功能的主分支,以及一个带有它的主题分支。