底线:
我想将拉取请求拆分为两个较小的拉取请求,这些拉取请求具有不同的文件子集。我不想通过提交拆分,我想按文件拆分。
详细信息:
假设我有一个分支branch_1
(在master
分支之外)我已经修改了2个文件:file_1
和file_2
。假设这些文件在一个或多个提交中被一起修改(更改不能通过提交分离),并假设这些文件不以任何方式相互引用。
一段时间后,我想将branch_1
合并到master
,但决定只有file_1
可以合并。我可能稍后合并file_2
,所以我把它放在一个新的分支上。
所以我创建了branch_2
branch_1
。 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
合并到{{} 1}},然后它将删除branch_2
。这不是我想要的!
基本上我希望file_2
上的file_2
永远不存在。
答案 0 :(得分:2)
一种选择特定文件的便捷方式:
branch_2
创建master
branch_1
合并到branch_2
中branch_2
中的剩余文件现在,您可以通过反向文件选择再次重复该过程,立即将两个分支完全拆分,也可以等到branch_2
合并成master
然后合并master
放入branch_1
中,可以有效地“快速转发”所选文件并将其从原始branch_1
中排除。
(*)许多基于UI的git客户端提供批量还原工具,使该过程相当舒适
编辑:添加了--squash选项,否则来自branch_1
的提交可能会以仅包含其实际内容的一部分的master
结尾
答案 1 :(得分:0)
而不是从branch_2
提出branch_1
。我将从branch_2
分支发出master
并进行更改,将其合并为主文件,然后将branch_2
合并到branch_1
这基本上是git workflow(很好的阅读)
答案 2 :(得分:0)
因此,我得出的结论是git对此没有很好的机制,但是使用PyCharm(以及其他一些工具)很容易做到。
要使用pycharm进行此操作,首先git checkout master
,然后git checkout branch_3
,然后在Pycharm的“项目”工具栏中右键单击项目的根文件夹,然后转到Git -> Compare with Branch
,选择{{1 }},然后将要合并的branch_1
从file_1
复制到当前代码(branch_1
)中。现在,您可以从branch_3
到branch_3
进行拉取请求。