git merge和git rebase的区别

原文地址为: git merge和git rebase的区别

合并两个commit有两种方式:一种是 git merge ,而这一种在git pull命令中是默认的   另一种是 git rebase


git pull命令中

git pull <远程主机名> <远程分支名>:<本地分支名>

例如:git pull origin next:master

把远程origin分支next fetch回来并git merge

git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

而如果使用rebase方式则

git pull --rebase origin next:master

这里建议还是先git fetch在做决定是git merge还是git rebase吧,如果只是git pull则默认为merge。


现在看看merge和rebase的区别:

引用一个文章:http://stackoverflow.com/questions/16666089/whats-the-difference-between-Git-merge-and-git-rebase


Suppose originally there were 3 commits, A,B,C:

A-B-C

Then developer Dan created commit D, and developer Ed created commit E:

A-B-C-D-E

Obviously, this conflict should be resolved somehow. For this, there are 2 ways:

MERGE:

A-B-C-D-E-M

Both commits D and E are still here, but we create merge commit M that inherits changes from both D and E. However, this creates diamond shape, which many people find very confusing.

REBASE:

A-B-C-D-E-R

We create commit R, which actual file content is identical to that of merge commit M above. But, we get rid of commit E, like it never existed (denoted by dots - vanishing line). Because of this obliteration, E should be local to developer Ed and should have never been pushed to any other repository. Advantage of rebase is that diamond shape is avoided, and history stays nice straight line - most developers love that!

讲的真好,真棒,32个赞。

diamond 菱形

get rid of 删除

identical 相同的


转载请注明本文地址: git merge和git rebase的区别

猜你喜欢

转载自blog.csdn.net/chch998/article/details/80953635