summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 0820366)
raw | patch | inline | side by side (parent: 0820366)
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | |
Fri, 31 Aug 2007 17:10:21 +0000 (18:10 +0100) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Sat, 1 Sep 2007 06:22:51 +0000 (23:22 -0700) |
The interactive mode of rebase can be used to split commits. Tell the
interested parties about it, with a dedicated section in the man page.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
interested parties about it, with a dedicated section in the man page.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-rebase.txt | patch | blob | history |
index a1b6dce73d2f2075ef163bf4d6cdea1abc6104ce..640ea3b38df5360bb416f38ebaaf74cc35a44d3b 100644 (file)
-i, \--interactive::
Make a list of the commits which are about to be rebased. Let the
- user edit that list before rebasing.
+ user edit that list before rebasing. This mode can also be used to
+ split commits (see SPLITTING COMMITS below).
-p, \--preserve-merges::
Instead of ignoring merges, try to recreate them. This option
$ git rebase -i -p --onto Q O
-----------------------------
+
+SPLITTING COMMITS
+-----------------
+
+In interactive mode, you can mark commits with the action "edit". However,
+this does not necessarily mean that 'git rebase' expects the result of this
+edit to be exactly one commit. Indeed, you can undo the commit, or you can
+add other commits. This can be used to split a commit into two:
+
+- Start an interactive rebase with 'git rebase -i <commit>^', where
+ <commit> is the commit you want to split. In fact, any commit range
+ will do, as long as it contains that commit.
+
+- Mark the commit you want to split with the action "edit".
+
+- When it comes to editing that commit, execute 'git reset HEAD^'. The
+ effect is that the HEAD is rewound by one, and the index follows suit.
+ However, the working tree stays the same.
+
+- Now add the changes to the index that you want to have in the first
+ commit. You can use gitlink:git-add[1] (possibly interactively) and/or
+ gitlink:git-gui[1] to do that.
+
+- Commit the now-current index with whatever commit message is appropriate
+ now.
+
+- Repeat the last two steps until your working tree is clean.
+
+- Continue the rebase with 'git rebase --continue'.
+
+If you are not absolutely sure that the intermediate revisions are
+consistent (they compile, pass the testsuite, etc.) you should use
+gitlink:git-stash[1] to stash away the not-yet-committed changes
+after each commit, test, and amend the commit if fixes are necessary.
+
+
Authors
------
Written by Junio C Hamano <junkio@cox.net> and