使用git filter-branch仅更改受影响的提交记录。

3

20次提交之前,一个大的二进制文件被添加到了我的git仓库中。要删除它,请使用以下命令:

git filter-branch --index-filter "git rm --cached --ignore-unmatch FILE" \
    --prune-empty HEAD

我需要修改项目历史记录中的每个提交(约1100个)的SHA1。它确实删除了文件,但我希望只需对少量修改后的提交执行git push -f即可。有没有办法告诉filter-branch仅修改包含FILE及其子代注释的提交,对于我的情况大约是20个提交?


我相信每个SHA1值改变的原因是因为它更新了提交者信息。 - Lily Ballard
1个回答

6
如果你知道引入这个文件的提交,最简单的方法是指定 $SHA^..HEAD(其中$SHA 是引入它的提交)。这将防止Git查看旧的提交。
如果引入该文件的提交“仅”引入了它,没有做其他修改,自那以后也没有其他提交影响到它,那么你可以更简单地在不需要filter-branch的情况下去掉它,只需使用 git rebase --onto $SHA^ $SHA (其中$SHA 是引入该文件的提交)。这将直接从历史记录中删除该提交$SHA

第一个建议很好。在这种情况下,提交包含许多其他更改(这也是二进制文件首次出现的原因之一)。不过还是感谢您教我--onto标志! - devoid

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