git: squash/fixup earlier commit
git
Solution
If you're just looking for the easy solution for fixing up earlier commits, read the question! It explains it all. But since Elmarco was asking for a slick way, here we go:
As of Git 1.7.0, there is an `--autosquash` option for `rebase`, which does what you want. There is also the `--fixup` and `--squash` options for `commit` to make things easier. With some aliasing you can probably even get the whole thing into a single command.
I'd suggest upgrading to the newest Git for maximum awesomeness:
git/Documentation/RelNotes $ grep -i -A1 autosquash\\\|fixup *
1.7.0.txt: * "git rebase -i" learned new action "fixup" that squashes the change
1.7.0.txt- but does not affect existing log message.
--
1.7.0.txt: * "git rebase -i" also learned --autosquash option that is useful
1.7.0.txt: together with the new "fixup" action.
1.7.0.txt-
--
1.7.3.txt: * "git rebase -i" peeks into rebase.autosquash configuration and acts as
1.7.3.txt: if you gave --autosquash from the command line.
1.7.3.txt-
--
1.7.4.txt: * "git commit" learned --fixup and --squash options to help later invocation
1.7.4.txt- of the interactive rebase.
--
1.7.4.txt: * "git rebase --autosquash" can use SHA-1 object names to name which
1.7.4.txt: commit to fix up (e.g. "fixup! e83c5163").
1.7.4.txt-
Problem
Suppose you have: ``` A-B-C ``` Now your build/test fails. The fix should be merged in A. My current work-flow is like this: ``` $ git commit -m "fixA" A-B-C-fixA $ git rebase -i A~1 ``` And squash fixA in A, result in: ``` A'-B-C ``` Is there a command to do something like: ``` A-B-C + (index with fix for A) $ git commit -supperdupper A ``` Result: ``` A'-B-C ```