【发布时间】:2020-07-05 15:56:24
【问题描述】:
我想对我的 git 历史记录中的所有文件应用更改。更准确地说,我想修改一个特定的行,即作者姓名(它写在我所有文件的标题中,我不是在谈论 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>/" ?提前致谢。
【问题讨论】:
-
您需要编写一个实际作用于每个文件的过滤器。您的 sed 命令没问题,它只需要一个包装器,类似于“一次查找每个文件,在找到的文件上运行 sed,报告成功”。某些版本的 sed 可以采用多个文件参数 - 如果您有其中之一,请考虑使用
find和xargs来减少sed调用的数量。
标签: git sed git-rewrite-history