For the first time, I tried to rewrite my git history using git filter-branch
. I did this by writing a (Python) script (let's call it edit_file
) that makes an edit to a file (let's call it target_file
). Then, I ran this command:
git filter-branch --tree-filter "path/to/edit_file" HEAD
I got a nice stream of output which seemed to indicate that I'd gotten the effect that I wanted, but when viewed target_file
, I did not see any changes. When I run edit_file
directly, target_file
in my working copy successfully receives the edits that I intended.
It sounds like my changes exist within some deep, dark, and dank recess in git's twisted mind, and I just need a magical incantation to summon forth my changes. I have no idea whether this is correct, nor do I understand where to begin looking, because all the material that I've read (including the official git book) indicates that once git filter-branch
finishes, the branch that I am working on should have the changes that edit_file
would perform on every version of target_file
...
Halp?
Sorry if this is a bit long winded, but I don't know what details are necessary (because that is a core feature of being confused).
More details:
The reasons I say that it looked like filter-branch
did what I wanted are:
I could see the output of edit_file running on each commit, and it indicated success on all of them. The output of edit_file
changes as it operates on different versions of target_file
, and I was able to see the different output from edit_file
as git filter-branch
moved through history.
At the end, I saw this:
Ref 'refs/heads/my-branch' was rewritten
PS: Before doing git filter-branch, I ran
git checkout -b my-branch
to create a new branch named my-branch (and check it out), in case git filter-branch went horribly wrong.
After seeing that git filter-branch ...
left target_file
unchanged, I ran git checkout -b my-branch
, but I guess that did nothing. I thought it might do something, because the last line from git filter-branch
seems to be saying that the branch my-branch
has been changed, but I honestly do not understand what that line means.
It sounds like my changes exist within some deep, dark, and dank recess in git's twisted mind, and I just need a magical incantation to summon forth my changes.
That is why you don't use git filter-branch
anymore (it is obsolete, along with BFG)
You use git filter-repo
with