首页 > 解决方案 > 我使用 git filter-branch 所做的更改发生了什么?

问题描述

我第一次尝试使用git filter-branch. 我通过编写一个 (Python) 脚本(我们称之为它edit_file)来编辑文件(我们称之为它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我想要的那样的原因是:

  1. 我可以看到每次提交时都运行 edit_file 的输出,这表明所有提交都成功了。在edit_file不同版本target_file的.edit_filegit filter-branch

  2. 最后,我看到了这个:

    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,但我想那什么也没做。我认为它可能会有所作为,因为 from 的最后一行git filter-branch似乎是说分支my-branch已更改,但老实说,我不明白那行是什么意思。

标签: gitgit-filter-branch

解决方案


听起来我的变化存在于 git 扭曲的头脑中的某个深沉、黑暗和潮湿的隐蔽处,我只需要一个神奇的咒语来召唤我的变化。

这就是您不再使用的原因git filter-branch它已过时,与 BFG 一起

git filter-repo


推荐阅读