git rebase confusion

let’s say if I have 2 branches
top and master
if I am on feature branch, and run git rebase master does it rebase master or rebase topic branch?

doing git rebase --help gave me this

Assume the following history exists and the current branch is “topic”:

             A---B---C topic
            /
       D---E---F---G master

From this point, the result of either of the following commands:

       git rebase master
       git rebase master topic

would be:

                         A'--B'--C' topic
                        /
           D---E---F---G master

NOTE: The latter form is just a short-hand of git checkout topic followed by git rebase master. When rebase exits topic will remain the checked-out branch.

And if I want to achieve this D---E---F---G---A---B---C master, should I switch to master and run git rebase -i topic?

And if I run git rebase -i topic try to squash A,B,C to C to become D---E---F---G---C master, I get noop

  • How to rebase backwards, preferably without using diff/apply?
  • git rebase after pull
  • Switch to hg-flow model: how to rebase commits and branches
  • Rebase a git repository
  • What way to choose in case of merging in my case?
  • Rebase branch on other branch in past
  • git rebase master then push origin branch results in non-fast-forward error
  • Git branches cannot see changes after rebase of master
  • One Solution collect form web for “git rebase confusion”

    Assuming you start out with a tree that looks like this

             A---B---C topic
            /
       D---E---F---G master
    

    You’ll want to run 2 commands git rebase master to make it look like this

                         A'--B'--C' topic
                        /
       D---E---F---G master
    

    then from master run git merge topic, which will do a fast forward merge, and you’ll end up with a tree that looks like this

                                 topic
                                /
       D---E---F---G---A---B---C -- master
    

    Can I just checkout master and run git rebase topic??

    Running that command would result in a tree that looks like this

                                 topic
                                /
       D---A---B---C---E---F---G -- master
    

    This is the (somewhat edited) git documentation for rebase, hopefully this will help:

    All changes made by commits in the current branch but that are not in upstream are saved to a temporary area.

    If you are on topic and run git rebase master, that means commits A, B and C are going into a temporary area.

    The current branch is reset to upstream. This has the exact same effect as git reset –hard upstream.

    At this point the temporary state of the tree looks like this

                     topic
                    /
       D---E---F---G -- master
    

    The commits that were previously saved into the temporary area are then reapplied to the current branch, one by one, in order.

    Commits A, B, C that were saved into the temporary area are “recommitted” to the branch you are currently on topic.

                                 topic
                                /
       D---E---F---G---A---B---C -- master
    

    Running git rebase topic from master would perform the exact same steps, except instead of putting commits A, B, C into the temporary area, it would put commits E, F G into the temporary area.

    Git Baby is a git and github fan, let's start git clone.