修改过去的提交(从多个最近的提交中删除文件)

Amend a past commit (remove files from more than one recent commit)

我有 7 个最近的提交,我想从中删除一个文件夹 - 这个文件夹(及其内容)不需要在这些提交中,也不在以前的提交中(在过去的 7 个之前)。我可以修改这些最近的 7 次提交并删除此文件夹吗?

这 7 次提交不是在 Master 分支上进行的。因此,另一个可能的选择是从 Master 创建一个新的 branch/pull 请求,并重新提交 7 次提交中的最新一次,而不暂存相关文件夹。

这两个选项是否可行?

有两个基本选项。

首先,如果文件是在这七次提交中的第一次提交中添加的,并且在随后的六次提交中没有被触及,您可以 git rebase -i,选择 "edit"第七个最旧的提交,添加文件的提交,然后在返回到 shell 之后,你可以 "git rm" 你想要删除的东西,提交,git rebase --continue,然后在重播剩余提交后,您再次变基,并将新提交压缩到其父提交中。这将是处理这种情况的最简单方法。

否则,您可以使用 git filter-branch--tree-filter 选项,从所有七次提交中擦除相关文件。

编辑:请注意,此操作过程假定您没有向上推分支。如果你已经推送了这个分支,这会增加一些额外的物流。基本上,一旦你推动,你需要与依赖你分支机构的任何其他人协调这个行动,因为你会让他们高高在上。您将基本上丢弃当前分支并替换它。