# Equivalent of "fixup" for git filter-branch

7 messages from 2012-05-10 to 2012-05-12. Participants: Philippe Vaucher, Andreas Schwab.
Thread: https://gitlist.dev/t/30495

## Philippe Vaucher, 2012-05-10 16:30

Subject: Equivalent of "fixup" for git filter-branch
Message-ID: <CAGK7Mr5D0WQn-Tc1B5=F7+3OgZd1uy54Be-ZrbyFv0CP8JY5bw@mail.gmail.com>
URL: https://gitlist.dev/e/CAGK7Mr5D0WQn-Tc1B5%3DF7%2B3OgZd1uy54Be-ZrbyFv0CP8JY5bw%40mail.gmail.com

```
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, 2012-05-10 17:39

Subject: Re: Equivalent of "fixup" for git filter-branch
Message-ID: <m21umsylz8.fsf@igel.home>
URL: https://gitlist.dev/e/m21umsylz8.fsf%40igel.home
In-Reply-To: <CAGK7Mr5D0WQn-Tc1B5=F7+3OgZd1uy54Be-ZrbyFv0CP8JY5bw@mail.gmail.com>

```
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, 2012-05-11 12:51

Subject: Re: Equivalent of "fixup" for git filter-branch
Message-ID: <CAGK7Mr43Mxn-oJBDt11u0RMnxT1tv9OfbH9qNufb9X05mKh22Q@mail.gmail.com>
URL: https://gitlist.dev/e/CAGK7Mr43Mxn-oJBDt11u0RMnxT1tv9OfbH9qNufb9X05mKh22Q%40mail.gmail.com
In-Reply-To: <CAGK7Mr7qdTwfha8aUdXE4FeXjA0rW3JL0q=a9kHArirjv5bygg@mail.gmail.com>

```
> > 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, 2012-05-11 12:51

Subject: Re: Equivalent of "fixup" for git filter-branch
Message-ID: <m2havmop75.fsf@igel.home>
URL: https://gitlist.dev/e/m2havmop75.fsf%40igel.home
In-Reply-To: <CAGK7Mr7qdTwfha8aUdXE4FeXjA0rW3JL0q=a9kHArirjv5bygg@mail.gmail.com>

```
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.
>
>
> 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, 2012-05-11 13:04

Subject: Re: Equivalent of "fixup" for git filter-branch
Message-ID: <CAGK7Mr6Z44iJqATgiWHXeutOHJM-vXauYeyYB0Z6c+mGYCr1Cg@mail.gmail.com>
URL: https://gitlist.dev/e/CAGK7Mr6Z44iJqATgiWHXeutOHJM-vXauYeyYB0Z6c%2BmGYCr1Cg%40mail.gmail.com
In-Reply-To: <m2havmop75.fsf@igel.home>

```
>> 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, 2012-05-11 13:45

Subject: Re: Equivalent of "fixup" for git filter-branch
Message-ID: <m2d36aompd.fsf@igel.home>
URL: https://gitlist.dev/e/m2d36aompd.fsf%40igel.home
In-Reply-To: <CAGK7Mr6Z44iJqATgiWHXeutOHJM-vXauYeyYB0Z6c+mGYCr1Cg@mail.gmail.com>

```
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, 2012-05-12 12:12

Subject: Re: Equivalent of "fixup" for git filter-branch
Message-ID: <CAGK7Mr6dMA=r3omxUgvozxi0o_rzF3ZwDwJB3FzNWW41OXYiTg@mail.gmail.com>
URL: https://gitlist.dev/e/CAGK7Mr6dMA%3Dr3omxUgvozxi0o_rzF3ZwDwJB3FzNWW41OXYiTg%40mail.gmail.com
In-Reply-To: <m2d36aompd.fsf@igel.home>

```
> > 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

```
