Git:根据pull请求中的新目录将pull pull请求拆分为较小的PR

use*_*149 14 git github git-filter-branch

我有一个功能分支的巨石.而不是一个大规模的PR成为主人,我想把它分成3个小时.

理想情况下,我想将功能分支中的一些独立代码单独提取到PR中.此代码位于新目录中,尚未调用,因此它将是一个相对安全的PR.但是,我不想仅复制目录并创建单个提交和PR,而是希望保留新PR的更改的所有提交历史记录.

这可能使用Git吗?我已经研究了filter-branch,但似乎是将repo拆分为两个,而不是将更改的diff分成两个(如果这是有道理的).

PSk*_*cik 8

Github拉请求总是涉及一个分支.如果要"拆分拉取请求",请确保将其拆分为提交,然后为要生成的每个拉取请求创建一个分支,并确保每个此类功能分支都具有所有相关提交.

看起来好的策略可能是在主分支旁边创建3个分支,挑选每个分支的相关提交,在main上删除它们,并且主要与三个分支中的每个分支合并.然后,您可以为每个分支和共享历史记录创建PR.


Von*_*onC 6

有没有办法将文件从包括其提交历史记录的分支中提取到新分支中?

提交一个提交,意味着整个repo进入一个分支,而不仅仅是一些文件.

一个好的选择是重置你不希望他们的内容预分支的文件

--x--x--x (master)
         \
          y--y--y (branch B1 with mixed work)
                 \
                  z (new branch B2, but with some files reset to master)
Run Code Online (Sandbox Code Playgroud)

B2B1您想要的文件开始并包含它们的历史记录.
但是B2还包括B1您希望成为的其他文件master.

您可以执行B2以下操作git reset --soft master:a git status将告诉您需要执行的所有更改,以便您的索引能够反映主数据.只是不添加涉及您要保留的文件的更改.
并且不要承诺.你只是想改变舞台回master一些文件.

(另见" 实际用途git reset --soft ")

完成后,git reset --soft B2将HEAD移回B2(但索引记录了反映主文件所需的所有更改和删除).

您现在可以提交,其他文件已恢复为master和您想要的文件保持不变,完全相同B1.