如何安全地从 master 中删除已经从分支中删除的文件?

How to safely remove files from master which have already been removed from a branch?

参考下图:

my-branch      A---B---C---D
              /     \
master       E---F---G

在从 B 合并到 G 期间,我无意中将文件添加到 master,我使用 [=16] 在 Dmy-branch 删除了这些文件=].不幸的是,我在 C 工作,尚未准备好与 master 合并。我可以安全地 git rm master 中的文件,并且稍后仍将 my-branch(文件已被删除)合并到 master 中吗?

换句话说,通过将 BG 合并,我在提交 G 时向 master 添加了我不想要的文件。这些文件 git rm 来自 my-branch,位于 D,但我不想将 D 合并到主文件中,因为 C 包含尚未准备好的更改.最好的方法是什么?

如果 D 提交只有 rm'ed 文件,那么我会将其移动到 C 提交之前,然后将其合并到主文件中。

在这种情况下,git rebase -i HEAD~2 然后重新排序提交,将 D 放在 C 之前。然后您可以将 D 合并到 master 中,最后得到

A---B---D---C / \ E---F---G---H

如果 D 有其他更改,那么你应该重做提交,这样它只有 rm 的文件,然后重新排序它们。

如果您已经发布了 my-branch,那么任何拉取它的人最终都会合并包含来自 CD 的现有更改。在那种情况下,我会将 cherry-pick D 放到 master 上,以便在合并 my-branch 之前删除文件,然后在合并到 master 时处理一个微不足道的合并冲突. IMO 最好是你以后处理一次冲突,而不是其他人现在处理它。

如果您不熟悉或不习惯使用交互式变基,您可以在提交 G 和 cherry-pick D 处创建一个分支。然后 pr 或将您的分支合并到 master 中。