X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=Documentation%2Fgit-rebase.txt;h=2f417a8f856094b3664eeff2ff3f0ce761c89503;hb=9e2163ea45b688e9de4744ebb9b01ea7e1ed8d56;hp=03e867a403a034e49e63fc0123970b44a199e8b5;hpb=03f99c03f806ca13b5974450409426c04af220f2;p=git.git diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt index 03e867a40..2f417a8f8 100644 --- a/Documentation/git-rebase.txt +++ b/Documentation/git-rebase.txt @@ -3,21 +3,30 @@ git-rebase(1) NAME ---- -git-rebase - Rebase local commits to a new head +git-rebase - Forward-port local commits to the updated upstream head SYNOPSIS -------- -'git-rebase' [-v] [--merge] [--onto ] [] +'git-rebase' [-v] [--merge] [-C] [--onto ] [] 'git-rebase' --continue | --skip | --abort DESCRIPTION ----------- -git-rebase replaces with a new branch of the same name. When -the --onto option is provided the new branch starts out with a HEAD equal -to , otherwise it is equal to . It then attempts to -create a new commit for each commit from the original that does -not exist in the branch. +If is specified, git-rebase will perform an automatic +`git checkout ` before doing anything else. Otherwise +it remains on the current branch. + +All changes made by commits in the current branch but that are not +in are saved to a temporary area. This is the same set +of commits that would be shown by `git log ..HEAD`. + +The current branch is reset to , or if the +--onto option was supplied. This has the exact same effect as +`git reset --hard ` (or ). + +The commits that were previously saved into the temporary area are +then reapplied to the current branch, one by one, in order. It is possible that a merge failure will prevent this process from being completely automatic. You will have to resolve any such merge failure @@ -26,9 +35,6 @@ that caused the merge failure with `git rebase --skip`. To restore the original and remove the .dotest working files, use the command `git rebase --abort` instead. -Note that if is not specified on the command line, the currently -checked out branch is used. - Assume the following history exists and the current branch is "topic": ------------ @@ -114,6 +120,27 @@ would result in: This is useful when topicB does not depend on topicA. +A range of commits could also be removed with rebase. If we have +the following situation: + +------------ + E---F---G---H---I---J topicA +------------ + +then the command + + git-rebase --onto topicA~5 topicA~2 topicA + +would result in the removal of commits F and G: + +------------ + E---H'---I'---J' topicA +------------ + +This is useful if F and G were flawed in some way, or should not be +part of topicA. Note that the argument to --onto and the +parameter can be any valid commit-ish. + In case of conflict, git-rebase will stop at the first problematic commit and leave conflict markers in the tree. You can use git diff to locate the markers (<<<<<<) and make edits to resolve the conflict. For each @@ -121,7 +148,7 @@ file you edit, you need to tell git that the conflict has been resolved, typically this would be done with - git update-index + git add After resolving the conflict manually and updating the index with the @@ -141,10 +168,12 @@ OPTIONS :: Starting point at which to create the new commits. If the --onto option is not specified, the starting point is - . + . May be any valid commit, and not just an + existing branch name. :: - Upstream branch to compare against. + Upstream branch to compare against. May be any valid commit, + not just an existing branch name. :: Working branch; defaults to HEAD. @@ -173,6 +202,12 @@ OPTIONS -v, \--verbose:: Display a diffstat of what changed upstream since the last rebase. +-C:: + Ensure at least lines of surrounding context match before + and after each change. When fewer lines of surrounding + context exist they all must match. By default no context is + ever ignored. + include::merge-strategies.txt[] NOTES