Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写git历史记录,在每个文件中替换一个单词_Git_Git Filter Branch_Git Rewrite History - Fatal编程技术网

重写git历史记录,在每个文件中替换一个单词

重写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 这似乎

我想用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

这似乎是我能达到的最接近我想要的目标。

树过滤器在每个被过滤的树上运行,一次一棵树

就其效果而言,你可以想象它就像你做了:

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'