git:将一些文件的历史拆分到一个单独的分支中

标签 git branch rebase

假设我刚才介绍了 ,现在注意到它不应该是我的 main 分支的一部分,而应该是一个分支 feature。是否可以使用例如git-filter-branch 自动将所有 的历史从我的 main 分支移到 feature 分支?

最佳答案

听起来你正在做一些相当疯狂的事情! :)

也就是说,我看到了一些选项,但没有一个是特别自动化的。

  1. 如果您对该文件进行了大量提交,只需承认错误,从您的 HEAD 中创建一个新分支,然后将具有该功能的进一步提交放入该分支,直到它们稳定为止。如果你是 repo 的共享者,这将成为唯一真正的选择。没有人希望拥有不同的历史记录,尤其是当该功能在历史深处被提交时。

  2. 如果您只谈论 10 个左右实际触及该文件的提交,并且它们是最近提交的,没有许多其他提交交错,您可以在 HEAD 上 checkout 一个新分支,然后还原在添加该功能之前,您不希望将此功能返回到分支,然后从功能分支中挑选您需要的提交,直到您准备好在以后将它们全部提交。

    <
  3. 如果您要处理大量的历史记录、大量的交错提交,并且您真的根本不想让该功能出现,您可以写一点获取 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/

相关文章:

git - 在 git 中创建和删除大量分支不好吗?

Git - 无法删除远程分支

git - 推荐的 Git 持续集成系统?

git - 更改 Git 父分支

git - 重命名 git flow 中的分支

git - merge 后分支怎么办

git rebase 分支与祖 parent

git - 我怎样才能知道有多少 master 中的提交不在我的分支中?

Git:使用 bfg (beg-repo-cleaner) 删除特定文件

git - 使用 git rebase 编辑 merge 提交