git - Git:如何按文件(而不是按提交)拆分分支?

标签 git branch git-branch git-merge pull-request

底线:

我想将一个 pull 请求拆分为两个较小的 pull 请求,它们具有不同的文件子集。我不想按提交拆分,我想按文件拆分。

详细信息:

假设我有一个branch_1分支(位于master分支之外),在其中修改了2个文件:file_1file_2。假设在一个或多个提交中一起修改了这些文件(更改不能通过提交分开),并且假定这些文件没有以任何方式相互引用。

一段时间后,我想将branch_1 merge 为master,但决定仅准备将file_1 merge 。我稍后可能会 merge file_2,因此将其放在新的分支上。

因此,我从branch_2创建一个branch_1branch_2现在同时包含对file_1file_2的更改。很好,因为branch_2无论如何都将在branch_1之后 merge 。

现在,我如何才能很好地还原branch_1以删除对file_2的更改?

如果我只是继续使用branch_1git checkout master file_2,则可以,但是:当我将branch_1 merge 为master,然后将master merge 为branch_2时,它将删除file_2。这根本不是我想要的!

基本上,我想让它看起来像file_2上根本不存在branch_1

最佳答案

选择特定文件的一种更方便的方法:

  • branch_2创建master
  • 使用--no-commit和--squash
  • branch_1 merge 为branch_2
  • 还原要从新分支(*)中排除的特定文件
  • 提交branch_2中的剩余文件

  • 现在,您可以使用反向文件选择再次重复该过程,立即将两个分支完全分开,或者只是等到branch_2 merge 到master中,然后再将master merge 回branch_1中,从而有效地“快速转发”那些选定的文件并将其排除在外来自原始的branch_1

    (*)许多基于UI的git客户端提供批量还原工具,使过程相当舒适

    编辑:添加了--squash选项,因为从branch_1提交的其他内容可能最终在master中,但仅包含其实际内容的一部分

    关于git - Git:如何按文件(而不是按提交)拆分分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49034675/

    相关文章:

    linux - git 通过 ssh 设置 git 可执行文件的远程路径

    java - 如何使用git中止特定文件的 merge ?

    java - 如何在 Eclipse 中的 git 分支之间进行纯文本比较(使用 EGit)

    SVN:跨项目共享通用代码的最佳方式

    Maven 发布插件 : Branch without snapshot in version

    Git:无法理解为什么分支(主题)提交/merge 发生在主分支上

    git - 如何将一个git分支 merge 到多个发布分支

    git - 如何处理/修复 git add/add 冲突?

    git - 如何获取从 GIT 分支创建的所有分支的列表(获取分支的所有子分支)

    templates - GitHub 拉取请求模板 : get current branch name