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'
我想对 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'