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

3

我有7个最近的提交,我想从中删除一个文件夹 - 这个文件夹(及其内容)不需要出现在这些提交中,并且在之前的提交中也没有出现过(在这7个提交之前)。我能否修改这些最近的7个提交并删除这个文件夹?

这7个提交并非在主干分支上进行。因此另一个可能的选项是基于主干创建一个新的分支/拉取请求,并重新提交最近的7个提交中的最新提交,但不包括相应文件夹的内容。

这两种选项都可行吗?

1个回答

4
有两个基本选项。
首先,如果这些文件是在七次提交的第一次提交中添加的,并且在随后的六次提交中没有被修改过,那么您可以使用git rebase -i命令,选择第七个最早的提交并选择 "edit",然后在返回shell之后,您可以使用"git rm"命令删除要删除的内容,提交更改,使用git rebase --continue命令继续进行rebase操作,然后在其父提交中合并新的提交。这是处理此情况最简单的方法。
否则,您可以使用git filter-branch命令和--tree-filter选项,从所有七个提交中删除相关文件。
编辑:请注意,这种做法假定您尚未推送您的分支。如果您已经推送了此分支,则需要进行额外的后勤协调。基本上,一旦您推送后,您需要与任何依赖于您的分支的人协调此操作,因为您将使他们无法继续工作。您将基本上放弃当前分支,并替换它。

1
当我阅读这个问题时,我的印象是该分支尚未被推送,仅存在于他的克隆中。 - Sam Varshavchik
谢谢!我会试一下。我已经推送了这个分支,但是最近才推送的。还没有其他人在使用它。 - William GP
@WilliamGP,请注意,在执行git rm之后,你需要执行git commit --amend。另外,在推送代码时,你需要使用git push -f命令。 - David Deutsch

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