Merge branch 'jn/document-rebase-i-p-limitation' into maint
authorJunio C Hamano <gitster@pobox.com>
Tue, 22 Jun 2010 16:31:47 +0000 (09:31 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 22 Jun 2010 16:31:47 +0000 (09:31 -0700)
* jn/document-rebase-i-p-limitation:
rebase -i -p: document shortcomings

Documentation/git-rebase.txt
t/t3404-rebase-interactive.sh
index 50ba2e469f48f1bc16c3f6e3b6f6451a9e29637a..be23ad2359b486e4da2ef85962d73cdfed7097fe 100644 (file)
@@ -310,6 +310,11 @@ link:howto/revert-a-faulty-merge.txt[revert-a-faulty-merge How-To] for details).
 -p::
 --preserve-merges::
        Instead of ignoring merges, try to recreate them.
++
+This uses the `--interactive` machinery internally, but combining it
+with the `--interactive` option explicitly is generally not a good
+idea unless you know what you are doing (see BUGS below).
+
 
 --root::
        Rebase all commits reachable from <branch>, instead of
@@ -611,6 +616,28 @@ The ripple effect of a "hard case" recovery is especially bad:
 case" recovery too!
 
 
+BUGS
+----
+The todo list presented by `--preserve-merges --interactive` does not
+represent the topology of the revision graph.  Editing commits and
+rewording their commit messages should work fine, but attempts to
+reorder commits tend to produce counterintuitive results.
+
+For example, an attempt to rearrange
+------------
+1 --- 2 --- 3 --- 4 --- 5
+------------
+to
+------------
+1 --- 2 --- 4 --- 3 --- 5
+------------
+by moving the "pick 4" line will result in the following history:
+------------
+       3
+       /
+1 --- 2 --- 4 --- 5
+------------
+
 Authors
 ------
 Written by Junio C Hamano <gitster@pobox.com> and
index f20ea38411d0ca67709dbde0bfd1108e28c0dd71..6668907ec5c5ba196c39fd9a2097050d92ccbe57 100755 (executable)
@@ -181,6 +181,12 @@ test_expect_success '-p handles "no changes" gracefully' '
        test $HEAD = $(git rev-parse HEAD)
 '
 
+test_expect_failure 'exchange two commits with -p' '
+       FAKE_LINES="2 1" git rebase -i -p HEAD~2 &&
+       test H = $(git cat-file commit HEAD^ | sed -ne \$p) &&
+       test G = $(git cat-file commit HEAD | sed -ne \$p)
+'
+
 test_expect_success 'preserve merges with -p' '
        git checkout -b to-be-preserved master^ &&
        : > unrelated-file &&