我使用git filter-branch所做的更改发生了什么?

问题描述 投票:2回答:2

[我第一次尝试使用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看起来像我想要的那样是:

  1. 我可以看到在每次提交时运行edit_file的输出,并且表明所有输出都成功。 edit_file的输出随着在target_file的不同版本上的操作而变化,当edit_file在历史记录中移动时,我能够看到git 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,但我想那什么也没做。我认为它可能会有所作为,因为git filter-branch的最后一行似乎在说分支my-branch已更改,但老实说我不明白该行的含义。

git git-filter-branch
2个回答
2
投票

听起来我的变化存在于git扭曲的头脑中某个深沉,黑暗和潮湿的凹槽中,我只需要一个神奇的咒语就可以得出我的变化。

这就是为什么您不再使用git filter-branchgit filter-branch

您将it is obsolete, along with BFG与]一起使用>

  • git filter-repo将过滤器限制为特定文件
  • [git filter-repo以调用您的脚本并编辑该文件。

0
投票

所以...看起来git filter-branch没做任何事情,只是在.git dir中留下了奇怪的备份便便。 git gc不管出于什么原因都不能清除它(也许应该还有git clean-poop命令以及gc?)。不知道会做什么,除了

© www.soinside.com 2019 - 2024. All rights reserved.