A `revert` in an interactive rebase can be useful, e.g. if a faulty commit was pushed to the main branch already, so you can't just drop it. When you are already working in a feature branch you might just want to revert said commit right where you branched off from main, so you can continue working on the feature you intend while still being up-to-date otherwise. Another reason why you might not want to drop a commit is if it is a work in progress one and you want to properly fix it later, but for now need to revert the changes. That way it is a lot cleaner to structure your branch like this: A---B---C (B is WIP commit you cannot use as is) => A---B---~B---C (temporarily revert B (called "~B") directly after it is created, until you find the time to fix it - at which point in time you will naturally drop the revert commit) This way you still have the WIP patch, but "your history is not broken the whole time". Signed-off-by: Michael Lohmann <mi.al.lohmann@xxxxxxxxx> --- Documentation/git-rebase.txt | 3 +++ rebase-interactive.c | 1 + sequencer.c | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt index 1dd6555f66..75f6fe39a1 100644 --- a/Documentation/git-rebase.txt +++ b/Documentation/git-rebase.txt @@ -911,6 +911,9 @@ commit, the message from the final one is used. You can also use "fixup -C" to get the same behavior as "fixup -c" except without opening an editor. +To revert a commit, add a line starting with "revert" followed by the commit +name. + `git rebase` will stop when "pick" has been replaced with "edit" or when a command fails due to merge errors. When you are done editing and/or resolving conflicts you can continue with `git rebase --continue`. diff --git a/rebase-interactive.c b/rebase-interactive.c index d9718409b3..e1fd1e09e3 100644 --- a/rebase-interactive.c +++ b/rebase-interactive.c @@ -53,6 +53,7 @@ void append_todo_help(int command_count, " commit's log message, unless -C is used, in which case\n" " keep only this commit's message; -c is same as -C but\n" " opens the editor\n" +"v, revert <commit> = revert the changes introduced by that commit\n" "x, exec <command> = run command (the rest of the line) using shell\n" "b, break = stop here (continue rebase later with 'git rebase --continue')\n" "d, drop <commit> = remove commit\n" diff --git a/sequencer.c b/sequencer.c index d584cac8ed..3c18f71ed6 100644 --- a/sequencer.c +++ b/sequencer.c @@ -1767,7 +1767,7 @@ static struct { const char *str; } todo_command_info[] = { [TODO_PICK] = { 'p', "pick" }, - [TODO_REVERT] = { 0, "revert" }, + [TODO_REVERT] = { 'v', "revert" }, [TODO_EDIT] = { 'e', "edit" }, [TODO_REWORD] = { 'r', "reword" }, [TODO_FIXUP] = { 'f', "fixup" }, -- 2.39.3 (Apple Git-145)