OK so:
In svn and bzr, I can branch, commit, merge, and my commit history will look like this:
41: Theodore R. Smith 2013-09-14 Jump to list by name instead of number.
40: Theodore R. Smith 2013-09-14 [merge] [m] Miscellaneous cleanups.
39.1.4: Theodore R. Smith 2013-09-14 [m] Removed old files.
39.1.3: Theodore R. Smith 2013-09-14 [m] Fixed bug where test could not...
39.1.2: Theodore R. Smith 2013-09-14 [m] Fixed a CSS layout bug from th...
39.1.1: Theodore R. Smith 2013-09-14 [m] Fixed a typo.
39: Theodore R. Smith 2013-09-14 Added a progress bar.
38: Theodore R. Smith 2013-09-14 [merge] Updated the core libraries.
37.1.3: Theodore R. Smith 2013-09-14 Updated HTML Kickstarter.
37.1.2: Theodore R. Smith 2013-09-14 Upgraded to from jQuery 1.8.3 to 2.0.3.
37.1.1: Theodore R. Smith 2013-09-14 Upgraded to jQuery Address v1.6.
If I don't want to expand out the history, I can:
41: Theodore R. Smith 2013-09-14 Jump to list by name instead of number.
40: Theodore R. Smith 2013-09-14 [merge] [m] Miscellaneous cleanups.
39: Theodore R. Smith 2013-09-14 Added a progress bar.
38: Theodore R. Smith 2013-09-14 [merge] Updated the core libraries.
At any time, I can get diffs, etc. for the individual merged commits quite easy, via bzr diff -r37.1.2..37.1.3
, for instance.
What's important is that my branch history is preserved and my mainline commit history is NOT polluted by the minor feature commits.
Now, whenever I do feature merges in git, however, with or without --no-ff
, I get the following in my commit history:
<hash>: Theodore R. Smith 2013-09-14 Jump to list by name instead of number.
<hash>: Theodore R. Smith 2013-09-14 [merge] [m] Miscellaneous cleanups.
<hash>: Theodore R. Smith 2013-09-14 [m] Removed old files.
<hash>: Theodore R. Smith 2013-09-14 Added a progress bar.
<hash>: Theodore R. Smith 2013-09-14 [m] Fixed bug where test could not...
<hash>: Theodore R. Smith 2013-09-14 [merge] Updated the core libraries.
<hash>: Theodore R. Smith 2013-09-14 [m] Fixed a CSS layout bug from th...
<hash>: Theodore R. Smith 2013-09-14 Updated HTML Kickstarter.
<hash>: Theodore R. Smith 2013-09-14 [m] Fixed a typo.
<hash>: Theodore R. Smith 2013-09-14 Upgraded to from jQuery 1.8.3 to 2.0.3.
<hash>: Theodore R. Smith 2013-09-14 Upgraded to jQuery Address v1.6.
My problems with this are many fold.
- The feature minor commits are all in the mainline history. What the hell?
- The feature minor commits are jumbled in the mainline history. It seems they are stuck there based on their original commit time, not merge time ;o
- There is no immediate numerical ranking of revision ids, only random hashes. But I bet that's not fixable.
- I wouldn't have ANY idea where a feature branch ends or begins, based upon looking at this.
I want a solution that
- Preserves all commit history, and lets me diff minor feature commits. This is needed for code forensics. So
git rebase
is out of the picture, as isgit merge --squash
. - Does NOT pollute the mainline commit log. This is probably the most severe.
- KEEPS ALL OF THE COMMITS IN THE PROPER ORDER, based upon merge time. Please, I can't have minor commits being mixed-matched.
- Optimally lets me at least see all of the minor feature commits, in the proper order, along with the mainline history, like how bzr does things, tho I don't mind only being able to view this info with a drill-in command, like
git log
.
Thank you for helping me understand this overly-complicated program!