Example flow: (0) Munge source in file src/foo.c, related docs in file doc/foo.texi. (1) C-x C-f src/ChangeLog RET C-c C-a TITLE RET foo.c (func): Change. RET RET C-x C-s C-x C-k RET (2) C-x C-f doc/ChangeLog RET C-c C-a M-p RET foo.texi (functionality): Change. RET RET C-x C-s C-x C-k RET (3) initiate commit sequence, specifying files: src/ChangeLog src/foo.c doc/ChangeLog doc/foo.texi => end up in buffer in Log Edit mode (4) C-c C-d ; git-scan-log-buffer-and-insert-commit-log tweak aesthetics (paragraph order, primarily) C-c C-c ; log-edit-done C-c C-M-r ; revert-some-buffers This example assumes the details of each change fits in my head, which often is not the case. More typically, there is a series of ‘vc-diff’ invocations prior to (1) and (2). I sometimes (very rarely) interleave (0) and (1)/(2). Anyway, the point is that (3) and (4) take little thought/effort to perform.