git pull VS git fetch git rebase

Another question said git pull is like a git fetch + git merge .

But what is the difference between git pull VS git fetch + git rebase ?


It should be pretty obvious from your question that you're actually just asking about the difference between git merge and git rebase .

So let's suppose you're in the common case - you've done some work on your master branch, and you pull from origin's, which also has done some work. After the fetch, things look like this:

- o - o - o - H - A - B - C (master)
               
                P - Q - R (origin/master)

If you merge at this point (the default behavior of git pull), assuming there aren't any conflicts, you end up with this:

- o - o - o - H - A - B - C - X (master)
                            /
                P - Q - R --- (origin/master)

If on the other hand you did the appropriate rebase, you'd end up with this:

- o - o - o - H - P - Q - R - A' - B' - C' (master)
                          |
                          (origin/master)

The content of your work tree should end up the same in both cases; you've just created a different history leading up to it . The rebase rewrites your history, making it look as if you had committed on top of origin's new master branch ( R ), instead of where you originally committed ( H ). You should never use the rebase approach if someone else has already pulled from your master branch.

Finally, note that you can actually set up git pull for a given branch to use rebase instead of merge by setting the config parameter branch.<name>.rebase to true. You can also do this for a single pull using git pull --rebase .


In reply to your first statement 'git pull is like a git fetch + git merge.',

"In its default mode, git pull is shorthand for git fetch followed by git merge FETCH_HEAD" More precisely, git pull runs git fetch with the given parameters and calls git merge to merge the retrieved branch heads into the current branch"

(Ref: https://git-scm.com/docs/git-pull)


For your second statement/question: 'But what is the difference between git pull VS git fetch + git rebase' Again, from same source:

"With --rebase, it runs git rebase instead of git merge."


Now, if you wanted to ask the difference between fetch and merge, that is answered here too: https://git-scm.com/book/en/v2/Git-Branching-Rebasing (the difference between altering the way version history is recorded and what not)

链接地址: http://www.djcxy.com/p/1208.html

上一篇: Git:repo包含一个空目录

下一篇: git pull VS git获取git rebase