在整个git历史记录中替换和重命名文件

时间:2017-12-13 16:57:42

标签: git

我在git存储库中有一个文件太大而无法推送到GitHub。但是,压缩文件会使其低于阈值。

鉴于此,我想做的是修改历史记录以使用压缩版本完全替换文件(包括重命名)。

例如:

file.txt

应该变成:

file.zip (or file.txt.zip)

随着历史记录的相应内容被替换。

我能找到的有关更改历史记录的大部分信息都集中在删除文件或替换文本上。我无法找到任何关于完全替换文件的内容。

还值得注意的是,此时不会共享更改(因此我不应该破坏其他人的repo)并且文件不会直接在项目的其他位置引用(因此它不应该使任何先前的提交无效) )。

这似乎应该可以用git filter-branch来实现,尽管我还不确定如何(并且开始尝试的事情有点犹豫)。什么是实现这一变化的最佳方式?

1 个答案:

答案 0 :(得分:2)

在此之前请确定这些提交仅限于本地,并且不与任何人共享。否则,请避免重写历史记录!

如果你觉得安全......

获取引入file.txt的提交的哈希值(比方说, foo )。然后:

git rebase -i <foo>~1

您应该找到 foo 行并将“pickup”替换为“edit”。保存并退出,rebase将触发。然后:

git mv file.txt file.zip
# do modification to file.zip (eg. erase it with the real zip)
git add file.zip
git rebase --continue

这不应该做其他分支或樱桃选择!