git's ability to handle empty commits is somewhat lacking, especially when preforming a rebase. Nominally empty commits are undesireable entries, the result of commits that are made empty by prior commits covering the same changs. But occasionally, empty commits are useful to developers (e.g. inserting notes into the development history without changing any code along the way). In these cases its desireable to easily preserve empty commits during operations like rebases. This patch series enhances git to do just that. It adds two options to the git-cherry-pick command, --allow-empty, which allows git cherry-pick to preserve an empty commit, even if the fast forward logic isn't applicable during the operation, and --ignore-if-made-empty, which allows the user to restrict the application of --allow-empty to only those commits which were initially empty (not those commits made empty by a prior commit). It also enhances git-rebase to add a --keep-empty option, which implies the use of the above new options to cherry-pick. I've tested these operations out myself here and they work well for me Signed-off-by: Neil Horman <nhorman@xxxxxxxxxxxxx> CC: Jeff King <peff@xxxxxxxx> CC: Phil Hord <phil.hord@xxxxxxxxx> CC: Junio C Hamano <gitster@xxxxxxxxx> --- Change notes: Based on version 1 feedback from this list, the following changes have been made V2) * Changed --keep-empty to --allow-empty in the git cherry-pick command * Converted run_git_commit to use argv_array * Updated cherry-pick --allow-empty description in man page * added ignore-if-made-empty option to git-cherry-pick * Added test to test suite to validate the new cherry-pick options * Updated git-rebase man page to be less verbose and more accurate in the description of the keep-empty option * squashed the addition of the keep-empty flag in git-rebase down to one commit from 3 * fixed up coding style in git-rebase script * Optimized detection of empty commits * Only augmented git-rebase-editor message if empty commits are possible -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html