| Nope, you want what I called the event stack. It lets you have your cake and eat it too. The event stack is a record of every tip that was ever present in this repo other than unpushed commits. You were at cset 1234, you pull in 25 csets, the event stack has two events, 1 which points to 1234 and 2 which points at the tip after the pull. You commit "wacked the crap out of it", then commit "fixed typo", then commit "added test", then commit $whatever. The event stack is 1
2
. which points at your current tip but is floating Now you push. Your event stack is 1, 2, 3 and 3 points at the tip as of your push. What about clone? You get your parent's event stack but other than that they are per repo. The event stack is the linear history you want, it is the view that everyone wants. It's "what are the list of tips I care about in this repo?". Have a push that broke your tree but you don't know what the previous tip was because the push pushed 2500 commits? No problem. The event stack is a stack and there is a "pop" command that pops off the last change to the event stack. So you would just do "git pop" and see if that fixes your tree, repeat until it does. We never built this in BitKeeper but I should try. If for no other reason than to show people you can have the messy (but historically accurate) history under the covers but have a linear view that is pleasant for humans. |
Even with this, I'd want to rebase away "fixed typo" prior to pushing, and more, I'd want to:
- organize commits into logical chunks so that they might be cherry-picked (in the literal sense, not just the VCS sense) into maintenance release branches
- organize commits as the upstream prefers (some prefer to see test updates in separate commits)
IIUC BitKeeper does have a sort of branch push history, unlike git. Is this wrong?