Re: Feature Request: Interactively pick fixup revision

Kristoffer Haugsbakk
2024-11-09T17:08:59Z

On Sat, Nov 9, 2024, at 12:41, Martin Imre wrote:
> Hi,
>
> first email to this list, so please forgive me if I'm doing something wrong.
>
> My usual workflow is using `git commit --fixup <revision>` quite
> frequently, as it eases the code reviewing process and allows for a
> clean history later on.
>
> One thing that is always cumbersome is to first find the SHA of the
> revision that I plan to commit a fixup to.
> I usually use git log and then copy the revision.
> I even wrote a script that eases this process using fzf:
> ```
> #!/bin/bash
>
> res=$(git log --oneline | fzf)
> ref=$(echo $res | cut -d ' ' -f1)
>
> git commit --fixup ${ref}
> ```
>
> I don't think fzf is really necessary here, but it speeds things up.
>
> Anyhow, I'm really surprised that this isn't a feature of git.
> I could see a `git commit --fixup` (without a revision) or `git commit
> --fixup --interactive` open up the git log and let one pick the
> revision they want to commit a fixup to.
>
> Cheers,
> Martin

This could be useful for a lot of commands. I use git-notes(1) a lot
(just as a niche example). I often wanna just get a list of the last
commits (e.g. `@{u}..`) when I want to edit a note. (I should try to
use fzf for that, thanks by the way!)

I’m imagining that some RFC implementation of this could get replies
like “but why just for `git commit --fixup/--squash…`?”

As far as third-party programs are concerned: see this section of the
Lazygit readme:[1]

> Pressing shift+a on any commit will amend that commit with the
> currently staged changes (running an interactive rebase in the
> background).

Not the exact same thing of course. You don’t get intermediary fixup
commit since it just runs interactive rebase in the background (so it
runs an uninteractive rebase…).

I haven’t tried Lazygit myself.

🔗 1: https://github.com/jesseduffield/lazygit