It makes a lot of sense if you don't view DVCSes as a fancy history mechanism but as a patch management system. Here, take this bunch of patches. What will I do if I'll merge them? I'll fix X, add option Z and port Q to ARM. Now let's say I also want to backport some patches to a stable branch, I'll take one from this branch, some from others and I'll fix X, fix Y and fix Z, but on ARM nothing works without the ARM commit, so on that branch I'll port Q to ARM.
[1] http://git.kernel.org/?p=git/git.git;a=blob;f=Documentation/...
At first I misread your explanation of DVCS as a patch management system and was going to say that non-imperative forms of commit summaries would function similarly. Now I understand your point, and I thank you again for explaining a useful way to conceptualize what merging multiple git commits together actually accomplishes.
With a bit of revisionism it reads like a wizard's incantation:
fix bug! ::code that fixes bug::
add feature! ::code that adds feature::
add documentation! ::comments etc.::
After all, in an ideal world, every code change would simply be the execution of the whiteboard/pencil-and-paper/planning that precedes it.
Fix bug foo
I'm going to assume that there is a bug that exists in this release that the author intends to fix later. Kind of like a TODO, which is what it sounds like.A random example from Chromium project[1]. There you can compare to get a feeling, because they are using both forms.
[1] http://www.chromium.org/getting-involved/dev-channel/release...
What happens if I apply commit X to my project? Will it "Fix bug 35035" or "Fixed bug 35035"?