git - 在 Git 中将一个特性分离到一个新的分支中

标签 git version-control branch

场景如下:我为一个代码库创建了一个新的存储库并进行了一些提交,但我决定该代码库的某些部分应该在它自己的分支中而不是在 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/

相关文章:

git - 声音、视频和其他二进制文件的版本控制

version-control - 使用源代码管理时如何隐藏连接字符串、用户名、密码?

Git rebase : finding the "next" commit to be rebased?

version-control - 命名分支与多个存储库

一个分支的SVN分支

git - 如何将分支从一个 GitHub 存储库复制到另一个?

git - 开源项目时处理以前的提交

windows - Git 扩展 - 无法推送到 Windows 网络驱动器中的 git 裸存储库

version-control - GitHub 多个存储库与多个环境的分支

git - 克隆的 git repo 中的损坏引用