[我第一次尝试使用git filter-branch
重写git历史记录。我是通过编写一个对文件进行编辑(称为edit_file
)的(Python)脚本(称为target_file
)来完成此操作的。然后,我运行了此命令:
git filter-branch --tree-filter "path/to/edit_file" HEAD
我得到了不错的输出流,这似乎表明我已经达到了想要的效果,但是当查看target_file
时,我没有看到任何变化。当我直接运行edit_file
时,工作副本中的target_file
成功收到了我想要的编辑。
它声音就像我的变化存在于git扭曲的头脑中某个深沉,黑暗和潮湿的凹槽中一样,我只需要一个神奇的咒语就可以得出我的变化。我不知道这是否正确,也不知道从哪里开始寻找,因为我已阅读的所有材料(包括官方git书)都表明,一旦git filter-branch
完成,我正在处理的分支就应该具有edit_file
将在target_file
的每个版本上执行的更改...
半身?
很抱歉,如果您花了点时间,但是我不知道需要什么细节(因为这是令人困惑的核心特征。
更多详细信息:
我说filter-branch
看起来像我想要的那样是:
我可以看到在每次提交时运行edit_file的输出,并且表明所有输出都成功。 edit_file
的输出随着在target_file
的不同版本上的操作而变化,当edit_file
在历史记录中移动时,我能够看到git filter-branch
的不同输出。
最后,我看到了:
Ref 'refs/heads/my-branch' was rewritten
PS:在执行git filter-branch之前,我跑过
git checkout -b my-branch
创建一个名为my-branch的新分支(并检出它,以防git filter-branch发生严重错误。
[看到git filter-branch ...
保持target_file
不变后,我运行了git checkout -b my-branch
,但我想那什么也没做。我认为它可能会有所作为,因为git filter-branch
的最后一行似乎在说分支my-branch
已更改,但老实说我不明白该行的含义。
听起来我的变化存在于git扭曲的头脑中某个深沉,黑暗和潮湿的凹槽中,我只需要一个神奇的咒语就可以得出我的变化。
这就是为什么您不再使用git filter-branch
(git filter-branch
)
您将it is obsolete, along with BFG与]一起使用>
git filter-repo
将过滤器限制为特定文件git filter-repo
以调用您的脚本并编辑该文件。所以...看起来git filter-branch没做任何事情,只是在.git dir中留下了奇怪的备份便便。 git gc不管出于什么原因都不能清除它(也许应该还有git clean-poop命令以及gc?)。不知道会做什么,除了