top | item 45880393

(no title)

nicois | 3 months ago

A large percentage of git users are unaware of git-absorb (https://github.com/tummychow/git-absorb). This complements just about any git flow, vastly reducing the pain of realising you want to amend your staged changes into multiple commits. This sits well alongside many TUIs and other tools, most of which do not offer any similar capability.

discuss

order

imiric|3 months ago

I gave it a try a few months ago, and wasn't impressed. About a quarter of the time it got confused about the commit it should squash into, and left the repo in a half-applied state. This inconsistency was enough for me to not trust it when it did work, so I stopped using it.

Honestly, it's too much magic for my taste. And, really, it's not much manual work to create fixup commits for the right commit anyway.

skydhash|3 months ago

I see the usefulness. But my client is magit, and committing and rebasing are so quick that this will reduce perhaps 30 seconds to one minute to my workflow. And I do not like most rust tools, because they're too dependency heavy.

kccqzy|3 months ago

Definitely. The instant fixup feature is just three keystrokes away (s c F). The only thing this helps is when you don't want to spend the extra brain cycles to figure out which commit to fixup on.

1718627440|3 months ago

The task that absorb speeds up is finding the commit where each hunk was last changed. The actual committing and rebaseing is still basically the same.

1718627440|3 months ago

It's in the GNU/Debian repo and I guess in a lot of other distros as well.

Aeglaecia|3 months ago

to me this appears to be trading off a valid change log for neat naming ... i dont see why rewriting history is ever a good idea

akvadrako|3 months ago

I find it quite hard to follow PRs when there is a lot of rebasing. I don't really find separate non-time-based commits useful.

So I agree but unfortunately it's the norm and policy for some clients.

Git-absord by default doesn't squash the fixups though, it creates new ones with special tags for easy rebasing later.