Git 将更改应用于所有先前提交中的所有文件

Git apply a change to all files in all previous commits

我想对 git 历史记录中的所有文件应用更改。更准确地说,我想修改作者姓名的特定行(它写在我所有文件的 header 中,我不是在谈论 git 作者)以删除以前的值从所有 git 历史记录中提取新的历史记录。
到目前为止,我已经尝试使用 git filter-branch 来执行以下命令: sed -i -e "s/<previous_author>/<new_author>/" 当我在单个文件上尝试它时效果很好(

 在文件中确实被  替换)。
但是,当我使用 git filter-branch -f --tree-filter 'sed -i -e "s/<previous_author>/<new_author>/"' HEAD 时,出现错误 sed: -i may not be used with stdin。我试图用 git rebase 做一些类似的事情,但我得到了同样的错误。
那么有没有办法做到这一点,所以对我以前提交的所有文件执行 sed -i -e "s/<previous_author>/<new_author>/" ?提前致谢。

你可以试试

git filter-branch -f --tree-filter \
'if git grep --name-only "@author";  
 then
    git grep --name-only "@author" | xargs sed -i -e "s/@prev_auth/@new_author/"
 fi'