文章目录
一、git merge和git rebase的区别
git merge 和 git rebase都是用来合并分支的。
我们知道在合并分支的时候是有可能会产生冲突的。冲突出现的根本原因是因为在合并的时候,不同分支修改了相同的位置。
二者的根本区别在于:
-
比如主分支是master,你工作的分支是feature分支,采用git merge和git rebase后,git merge不会保留merge的分支commit,而rebase会保留所有的commit;
-
rebase会将当前分支的commit放到公共分支的最后面,也叫做变基。就好像从公共分支又重新拉出来这个分支一样。
举例:如果从master拉一个feature分支出来,然后在feature分支上提交了若干个commit,这个时候有人把另外一个分支的东西合并到master中,然后这个时候如果你rebase master,就会把你在feature上的若干个commit,放到那个人的commit的后面。
- 而merge 会把公共分支和你当前的commit 合并在一起,形成一个新的 commit 提交。如上图图一的最后一次commit记录
二. git中如何处理冲突
如果使用merge合并分支的流程如下:
1.解决冲突。 2.执行git add file. 3. 执行git commit -m ‘fix’. 这个时候会产生一个新的有关于merge feature分支和master分支的commit。
如果使用rebase合并分支的流程如下:
1.解决冲突。 2.执行git add file. 3. 执行git rebase --continue 这个时候不会产生一个新的额外的commit,分支上不会有无意义的解决分支的commit;但是如果feature分支上存在多个commit,则需要重复处理多次冲突。
git pull和git pull --rebase区别:
git pull做了两个操作分别是‘获取’和合并。所以加了rebase就是以rebase的方式进行合并分支得到一条干净的分支流
git pull = git fetch + git merge FETCH_HEAD
git pull --rebase = git fetch + git rebase FETCH_HEAD