Github:根据文件将PR拆分为两个PR

6
这里有一个在Perforce中很容易但在Git中似乎难以实现的操作,让我们来看看。情况是这样的:有一个Pull Request,包含六个文件,称为A、B、C、X、Y和Z。这些都没有合并到主分支,但本地分支已经推送到远程(如果有必要的话,是Github)。
有许多提交涉及任何或所有这些文件。有些提交只涉及一个文件,有些提交涉及所有六个文件。
我想创建两个新的PR。一个PR包含A、B和C三个文件的所有更改,另一个PR包含X、Y和Z三个文件的所有更改。我不关心提交历史或分支发生了什么。在合并之前,所有提交将被压缩,并且所有工作分支将被删除。
3个回答

8

我曾经处于和你相似的情况,以下是我的做法:

  1. 检出你的特性分支。
  2. 假设你的主分支被命名为 main,运行 git reset --soft main。这将删除你在特性分支中的所有提交记录。但是你在那些提交中所做的所有更改都将留作未暂存的文件。
  3. 现在,创建一个新分支。暂存文件 A、B 和 C。提交、推送并创建一个新的 PR。这个 PR 将仅包含来自文件 A、B 和 C 的更改。
  4. 再次检出你的原始特性分支。再次创建一个新分支。这一次暂存文件 X、Y 和 Z。提交、推送并创建一个新的 PR。这个 PR 将仅包含来自文件 X、Y 和 Z 的更改。
  5. 关闭你原来包含所有6个文件更改的 PR,因为它不再需要,请求审阅者审阅你创建的2个新 PR。

为什么不使用现有的PR来处理其中一个文件集?可以使用“git force --push”命令删除其他三个文件,同时保留另一个分支的文件。 - astrochun
@astrochun 我们可以使用现有的 PR 来处理其中一个文件集。我只是不想使用 --force 命令而已。 - Omkar Rajam

3

这是一个同事给我的例子,你需要切换到你的主分支(main)、主页分支(home)或开发分支(dev),然后创建一个新的分支(branch),只将特定的文件拉入该分支中。然后使用相同的方法处理其它文件。

git checkout main-branch
git checkout -b first_half_files_pr
git checkout too_many_file_pr -- file_1 file_2 file_3
git add .
git commit -m "message"
git push
----
git checkout main-branch
git checkout -b second_half_files_pr
git checkout too_many_file_pr -- file_4 file_5 file_6
git add .
git commit -m "message"
git push

0

解决此问题的一种方法:

  1. 压缩所有更改
  2. 从当前分支创建一个新分支
  3. 修改提交并删除文件X、Y和Z的更改
  4. 强制推送并创建第二个PR
  5. 返回到另一个分支
  6. 修改提交并删除文件A、B和C的更改
  7. 强制推送以更新您当前的PR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接