如何安全地从 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] 在 D
从 my-branch
删除了这些文件=].不幸的是,我在 C
工作,尚未准备好与 master 合并。我可以安全地 git rm
master
中的文件,并且稍后仍将 my-branch
(文件已被删除)合并到 master
中吗?
换句话说,通过将 B
与 G
合并,我在提交 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
,那么任何拉取它的人最终都会合并包含来自 C
和 D
的现有更改。在那种情况下,我会将 cherry-pick D
放到 master 上,以便在合并 my-branch
之前删除文件,然后在合并到 master
时处理一个微不足道的合并冲突. IMO 最好是你以后处理一次冲突,而不是其他人现在处理它。
如果您不熟悉或不习惯使用交互式变基,您可以在提交 G 和 cherry-pick D 处创建一个分支。然后 pr 或将您的分支合并到 master 中。
参考下图:
my-branch A---B---C---D
/ \
master E---F---G
在从 B
合并到 G
期间,我无意中将文件添加到 master
,我使用 [=16] 在 D
从 my-branch
删除了这些文件=].不幸的是,我在 C
工作,尚未准备好与 master 合并。我可以安全地 git rm
master
中的文件,并且稍后仍将 my-branch
(文件已被删除)合并到 master
中吗?
换句话说,通过将 B
与 G
合并,我在提交 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
,那么任何拉取它的人最终都会合并包含来自 C
和 D
的现有更改。在那种情况下,我会将 cherry-pick D
放到 master 上,以便在合并 my-branch
之前删除文件,然后在合并到 master
时处理一个微不足道的合并冲突. IMO 最好是你以后处理一次冲突,而不是其他人现在处理它。
如果您不熟悉或不习惯使用交互式变基,您可以在提交 G 和 cherry-pick D 处创建一个分支。然后 pr 或将您的分支合并到 master 中。