假设我刚才介绍了 main
分支的一部分,而应该是一个分支 feature
。是否可以使用例如git-filter-branch
自动将所有 main
分支移到 feature
分支?
最佳答案
听起来你正在做一些相当疯狂的事情! :)
也就是说,我看到了一些选项,但没有一个是特别自动化的。
如果您对该文件进行了大量提交,只需承认错误,从您的 HEAD 中创建一个新分支,然后将具有该功能的进一步提交放入该分支,直到它们稳定为止。如果你是 repo 的共享者,这将成为唯一真正的选择。没有人希望拥有不同的历史记录,尤其是当该功能在历史深处被提交时。
如果您只谈论 10 个左右实际触及该文件的提交,并且它们是最近提交的,没有许多其他提交交错,您可以在 HEAD 上 checkout 一个新分支,然后还原在添加该功能之前,您不希望将此功能返回到分支,然后从功能分支中挑选您需要的提交,直到您准备好在以后将它们全部提交。
<如果您要处理大量的历史记录、大量的交错提交,并且您真的根本不想让该功能出现,您可以写一点获取
git log
输出的 shell 脚本樱桃将其挑选到一个新分支中。类似的东西:$ cd git-repo $ git checkout -b feature-x $ the-perfect-shell-script `git log --pretty=format:"%H" path/to/feature.c`
一旦你有了那个特性分支,所有的提交都被挑选出来了,你就可以使用
git filter-branch
过滤掉所有引用该文件的提交。 man page有一个简单的例子可以做到这一点。一旦你知道了,你就可以
git rebase feature-x --onto <filtered-branch>
你应该可以开始了。当然,这应该是非常令人沮丧的,特别是如果任何已发布。
关于git:将一些文件的历史拆分到一个单独的分支中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4278264/