底线:
我想将一个拉取请求分成两个较小的拉取请求,具有不同的文件子集。 我不想按提交拆分,我想按文件拆分。
详细信息:
假设我有一个名为branch_1
的分支(从master
分支派生),其中我修改了2个文件:file_1
和file_2
。 假设这些文件在一个或多个提交中一起修改(更改不能通过提交分离),并且假设这些文件没有以任何方式相互引用。
过一段时间后,我想将branch_1
合并到master
,但决定仅准备将file_1
合并。 我以后可能会合并file_2
,因此我将其放在一个新分支上。
所以我在branch_1
上创建了一个branch_2
。 现在,branch_2
现在包含对file_1
和file_2
的更改。 这没关系,因为无论如何branch_2
都将在branch_1
之后合并。
现在,我如何优雅地还原branch_1
以删除对file_2
的更改?
如果我只是在branch_1
上进行git checkout master file_2
,它可以工作,但是:当我将branch_1
合并到master
,然后将master
合并到branch_2
时,它将删除file_2
。 这根本不是我想要的!
基本上,我希望就像file_2
在branch_1
上从未存在过一样。
--no-commit
和--squash
将CommitB合并,然后在CommitC中提交其中的10个文件并丢弃其他文件,那么这些10个文件的历史记录就会丢失;在这些文件的日志中只有CommitC。如果我将CommitB分支合并到我的新分支中,我就可以“恢复”我在新分支中丢弃的20个文件的历史记录,但其他10个文件的历史记录仍然丢失。虽然不是世界末日,并且大多数情况下都是预期的,但如果有其它选择的话,这并不理想。 - ruffin