重写git历史记录,在每个文件中替换一个单词
我想用git过滤器分支重写我的存储库的git历史,以将所有文件中出现的“foo.bar”替换为“bar.foo” 我怎样才能做到这一点 更新:重写git历史记录,在每个文件中替换一个单词,git,git-filter-branch,git-rewrite-history,Git,Git Filter Branch,Git Rewrite History,我想用git过滤器分支重写我的存储库的git历史,以将所有文件中出现的“foo.bar”替换为“bar.foo” 我怎样才能做到这一点 更新: 我正在使用--tree filter参数,并且我能够用以下内容替换指定文件中的单词: git filter-branch -f --tree-filter ' if [ -f testfile ] then sed -i s/foo.bar/bar.foo/g testfile fi ' -- --all 这似乎
我正在使用--tree filter参数,并且我能够用以下内容替换指定文件中的单词:
git filter-branch -f --tree-filter '
if [ -f testfile ]
then
sed -i s/foo.bar/bar.foo/g testfile
fi ' -- --all
这似乎是我能达到的最接近我想要的目标。树过滤器在每个被过滤的树上运行,一次一棵树 就其效果而言,你可以想象它就像你做了:
git checkout <rev>
--tree filter
的特殊之处在于,它自动执行任何所需的git add
和/或git rm
(因此-i'
;-i.bak
将git添加所有.bak
文件)
(如果您有标签,请记住使用--标签名称过滤器
,注意删除带注释标签上的签名。)我认为这是不可能的。你为什么不简单地替换所有事件并提交呢?你能更具体地说明你需要什么帮助吗?您已经找到了git filter branch命令——您已经阅读了它的文档了吗?您是否对git筛选器分支的操作感到困惑?到目前为止,您尝试了什么?我以前使用git filter branch在整个repo历史中重命名一个目录,但现在我尝试的是在整个历史中更改一些文件的内容。我已经阅读了git filter branch的手册页,没有看到任何具体的例子。我一直在尝试使用--tree过滤器参数来实现这一点,但运气不好。
find . -type f -print | xargs sed -i '' -e 's/foo\.bar/bar.foo/g'