git-rebase has lots of options that are mutually incompatible. Even among aspects of its behavior that is common to all rebase types, it has a number of inconsistencies. This series tries to document, fix, and/or warn users about many of these. Changes since v4 (short branch-diff at the end): - Fixed --strategy vs. --strategy-option (in patch 3, carries over to context region in later commit) v4 didn't get a lot of feedback (though it was picked up by Junio), so I'll repeat the areas that would be of most note for reviewers since v3: * I have left patch 9 in RFC state; since v3 it has an expanded the commit message with an in-depth usability rationale for the change. * It sounded like Junio was slightly unclear about the intent of the wording in Patch 1. Not sure if my answer (in email) was sufficient or if there are wording improvements others might suggest. * I'm assuming the --keep-empty and/or --empty={drop,halt,keep} (see comments on patch 5 of v3) can be resolved in a later series. Elijah Newren (9): git-rebase.txt: document incompatible options git-rebase.sh: update help messages a bit t3422: new testcases for checking when incompatible options passed git-rebase: error out when incompatible options passed git-rebase.txt: address confusion between --no-ff vs --force-rebase directory-rename-detection.txt: technical docs on abilities and limitations git-rebase.txt: document behavioral differences between modes t3401: add directory rename testcases for rebase and am git-rebase: make --allow-empty-message the default Documentation/git-rebase.txt | 135 ++++++++++++++---- .../technical/directory-rename-detection.txt | 115 +++++++++++++++ git-rebase.sh | 43 +++++- t/t3401-rebase-and-am-rename.sh | 105 ++++++++++++++ t/t3404-rebase-interactive.sh | 7 +- t/t3405-rebase-malformed.sh | 11 +- t/t3422-rebase-incompatible-options.sh | 88 ++++++++++++ 7 files changed, 462 insertions(+), 42 deletions(-) create mode 100644 Documentation/technical/directory-rename-detection.txt create mode 100755 t/t3401-rebase-and-am-rename.sh create mode 100755 t/t3422-rebase-incompatible-options.sh 1: 3f454ebc5e = 1: 3f454ebc5e git-rebase.txt: document incompatible options 2: 31a5a071a6 = 2: 31a5a071a6 git-rebase.sh: update help messages a bit 3: 5a2b5eec79 ! 3: bc3a5a3f95 t3422: new testcases for checking when incompatible options passed @@ -62,7 +62,7 @@ + + test_expect_failure "$opt incompatible with --strategy-option=ours" " + git checkout B^0 && -+ test_must_fail git rebase $opt --strategy=ours A ++ test_must_fail git rebase $opt --strategy-option=ours A + " + + test_expect_failure "$opt incompatible with --interactive" " 4: 1e1c83724a ! 4: ca3b8327f7 git-rebase: error out when incompatible options passed @@ -104,7 +104,7 @@ - test_expect_failure "$opt incompatible with --strategy-option=ours" " + test_expect_success "$opt incompatible with --strategy-option=ours" " git checkout B^0 && - test_must_fail git rebase $opt --strategy=ours A + test_must_fail git rebase $opt --strategy-option=ours A " - test_expect_failure "$opt incompatible with --interactive" " 5: 51023269d3 = 5: 6ac359359e git-rebase.txt: address confusion between --no-ff vs --force-rebase 6: f017d45dd9 = 6: e5c5db9110 directory-rename-detection.txt: technical docs on abilities and limitations 7: 0a359df404 = 7: e330437305 git-rebase.txt: document behavioral differences between modes 8: beaadceaef = 8: f704f7eee8 t3401: add directory rename testcases for rebase and am 9: 431b2c36d5 = 9: 436f597487 git-rebase: make --allow-empty-message the default -- 2.18.0.9.g431b2c36d5