I've been an enthusiastic user of stgit
for some time. This lets you work on a series of commits at the same time, so that you can edit them to look good before sending them out into the world (i.e. pushing upstream). You can move up and down a series of git commits making changes to them, rather than adding new commits onto the end of a branch.
One use I often make of this is preparing a bunch of orthogonal patches: patches which don't interact with each other or need to be applied in a strict order, but that I want all applied at once while I'm making day to day use of my software, so that I can test the changes in real use.
It's pretty awkward (i.e. impossible) to do this collaboratively though: all of git's support for collaborative work is by making new commits onto the end of branches, not editing earlier commits.
So I have been trying a new workflow: lots of features branches at once, instead of lots of stg patches; with a script I wrote, tmt
, which makes your checkout look like the merge of all of those feature branches, but lets you commit your changes onto one specific feature branch.
Here's the repo, with a README. Yes, it's Haskell. Of course. https://github.com/benclifford/tmt