场景如下:我为一个代码库创建了一个新的存储库并进行了一些提交,但我决定该代码库的某些部分应该在它自己的分支中而不是在 master 中。我如何将该代码分离到另一个分支中,以便主人“不知道”它?显然我不能只创建分支然后从 master 中删除代码,因为从 master 到新分支的任何后续 merge 也会删除分支中的代码。
我确定这有一个微不足道的答案,但我想不出应该怎么做:)
最佳答案
如果你可以 rebase master(即没有其他人有你想移动到分支的更改),我会使用 git rebase -i
重新排列 master 中的提交,以便所有提交应该在分支中,毕竟所有提交都应该留在 master 中。之后,创建分支并重置 master,使其不包含任何分支提交。
例如,如果您有提交(其中 B
表示您要移动的提交,M
表示应该保留的提交):
M1---B1---M2---B2---M3
将它们 rebase 为
M1---M2---M3---B1---B2
创建新的分支和 git reset --hard
master 到 M3
。
如果你不能 rebase master,创建你的分支,git revert
在 master 上你不想要的更改,然后执行 git merge -s ours master
.这有效地告诉分支机构您知道还原并且您不希望它在那里。
之后,如果您将 master merge 到分支中,master 中的更改会正确 merge ,但还原不会。更重要的是,如果您随后决定分支已完成并且您想要 merge 回 master,它也可以正常工作 - 来自分支的所有更改都将 merge ,包括那些已恢复的更改。
关于git - 在 Git 中将一个特性分离到一个新的分支中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6321336/