threads / discuss / 30495

Equivalent of "fixup" for git filter-branch

Subject: Equivalent of "fixup" for git filter-branch

## tl;dr

7 messages between May 10, 2012 and May 12, 2012.

replies: 6people: 2as markdown or json

Philippe Vaucher· May 10, 2012, 16:30 UTC · lore
Hello,

I know there is `skip_commit` for git filter branch with --commit-filter which squash the current commit with the next one, however I have trouble finding a "fixup" equivalent that'd squash the commit with the previous one (just like git rebase -i allows).

Yes, I know I could probably use git rebase instead but rebase doesn't keep the existing commiter date like git filter-branch does.

Philippe
Andreas Schwab· May 10, 2012, 17:39 UTC · re: Philippe Vaucher · lore

Re: Equivalent of "fixup" for git filter-branch

Philippe Vaucher <philippe.vaucher@gmail.com> writes:
> I know there is `skip_commit` for git filter branch with
> --commit-filter which squash the current commit with the next one,
> however I have trouble finding a "fixup" equivalent that'd squash the
> commit with the previous one (just like git rebase -i allows).

Probably doable with an index filter that updates the index for the parent commit with the contents of the fixup commit and a commit filter that skips the fixup commit.

Andreas.
-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."
Philippe Vaucher· May 11, 2012, 12:51 UTC · lore

Re: Equivalent of "fixup" for git filter-branch

Show 8 quoted lines
> > I know there is `skip_commit` for git filter branch with
> > --commit-filter which squash the current commit with the next one,
> > however I have trouble finding a "fixup" equivalent that'd squash the
> > commit with the previous one (just like git rebase -i allows).
>
> Probably doable with an index filter that updates the index for the
> parent commit with the contents of the fixup commit and a commit filter
> that skips the fixup commit.

Hum, I'm unsure about how this would look... can I use "git commit --amend" inside a commit-filter?

Also, how can I know in advance that the next commit will be a fixup commit?

Thanks, Philippe

Andreas Schwab· May 11, 2012, 12:51 UTC · lore

Re: Equivalent of "fixup" for git filter-branch

Philippe Vaucher <philippe.vaucher@gmail.com> writes:
Show 13 quoted lines
>>
>> > I know there is `skip_commit` for git filter branch with
>> > --commit-filter which squash the current commit with the next one,
>> > however I have trouble finding a "fixup" equivalent that'd squash the
>> > commit with the previous one (just like git rebase -i allows).
>>
>> Probably doable with an index filter that updates the index for the
>> parent commit with the contents of the fixup commit and a commit filter
>> that skips the fixup commit.
>
>
> Hum, I'm unsure about how this would look... can I use "git commit --amend"
> inside a commit-filter?

I don't think that will work if the amended commit has more than one children, since the result won't be reflected in the map function.

> Also, how can I know in advance that the next commit will be a fixup commit?

In the index filter, when $GIT_COMMIT equals the parent of the fixup commit, update the index with git read-tree from the fixup commit.

Andreas.
-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."
Philippe Vaucher· May 11, 2012, 13:04 UTC · re: Andreas Schwab · lore

Re: Equivalent of "fixup" for git filter-branch

>> Also, how can I know in advance that the next commit will be a fixup commit?
>
> In the index filter, when $GIT_COMMIT equals the parent of the fixup
> commit, update the index with git read-tree from the fixup commit.
Right, good idea.

I was also thinking maybe I could use --parent-filter: when I find a fixup commit, I set its parent to its parent's parent?

Philippe
Andreas Schwab· May 11, 2012, 13:45 UTC · re: Philippe Vaucher · lore

Re: Equivalent of "fixup" for git filter-branch

Philippe Vaucher <philippe.vaucher@gmail.com> writes:
> I was also thinking maybe I could use --parent-filter: when I find a
> fixup commit, I set its parent to its parent's parent?

This will keep the attributes of the fixup commit, discarding the parent's ones. In git rebase, a fixup keeps the attributes of the parent, discarding the ones of the fixup.

Andreas.
-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."
Philippe Vaucher· May 12, 2012, 12:12 UTC · re: Andreas Schwab · lore

Re: Equivalent of "fixup" for git filter-branch

Show 6 quoted lines
> > I was also thinking maybe I could use --parent-filter: when I find a
> > fixup commit, I set its parent to its parent's parent?
>
> This will keep the attributes of the fixup commit, discarding the
> parent's ones.  In git rebase, a fixup keeps the attributes of the
> parent, discarding the ones of the fixup.

Ah right. Thanks for your suggestions, I'll try to get it going. Maybe the result could be material for more examples in the man page.

Philippe

← back to recent threads