繁体   English   中英

从 git 历史记录中删除已删除的文件

[英]Remove deleted files from git history

我正在尝试从我的 git 存储库中拆分一个子项目。 但是,与将子目录分离(移动)到单独的 Git 存储库中不同的是,我没有将它放在自己的子目录中(将它移入并执行上述操作只会在移动后产生历史记录)。

我已经克隆了我想从中拆分子项目的分支到它自己的存储库中,并删除了子项目未使用的所有内容,因此基本上我可以将其用作子项目的存储库。

现在我想删除不再存在于该存储库中的所有文件的历史记录,以便只保留使其成为后代的文件的文件历史记录。

我认为 git-filter-branch 一定是可能的,但我不知道如何

提前谢谢了

这里有一些说明可以做你想做的事。

这将删除file_to_remove

git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_to_remove' --prune-empty -- --all

好的,现在我正在尝试使用以下技术,如果它有效,将报告回来,因为它似乎运行时间很长:在 zsh 或 bash 上克隆存储库

git log --diff-filter=D --summary <start_commit>..HEAD | egrep -o '*[[:alnum:]]*(/[[:alnum:].]*)+$' > deleted.txt

获取所有已删除的文件

for del in `cat deleted.txt`
do
    git filter-branch --index-filter "git rm --cached --ignore-unmatch $del" --prune-empty -- --all
    # The following seems to be necessary every time
    # because otherwise git won't overwrite refs/original
    git reset --hard
    git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
    git reflog expire --expire=now --all
    git gc --aggressive --prune=now
done;

这对您的数据来说可能是非常危险的,所以只能尝试克隆。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM