常用的merge的方式
使用场景和流程:
- master分支有c1和c2两个提交;
- 自己从master分支拉取新分支dev进行开发, 提交c3,c4,c5;
- 此时有其他人合并了某个提交c6到master分支;
- dev分支开发完毕,需要合并内容到master分支, 此时先切换到master分支( git checkout master );
- 然后先拉取master分支上最新的内容( git pull origin master )到本地; 此时会拉取到远程master上的c6内容;
- 再使用 git merge dev 将本地的dev分支提交合并到本地的master分支,有冲突就解决冲突;
- 然后提交本地合并好的 master分支到远程 ( git push origin master );此时本地和远程master都是最新的
- 最后将本地master合并到dev分支,并将dev推送到远程 ( git checkout dev ; git merge master ; git push origin dev ) ; 此时dev分支远程和本地都是最新的;
以上非线性提交;
rebase的方式
使用场景和流程:
- 提交和拉分支 和上面merge的方式一样, 就是合并的区别
- 在使用rebase命令之前需要将master分支拉到最新
- 切换分支到需要rebase的分支,这里是dev分支
- 执行git rebase master,有冲突就解决冲突,解决后直接git add . 再git rebase --continue即可
- 切换到master分支,执行git merge dev
- 发现采用rebase的方式进行分支合并,整个master分支并没有多出一个新的commit,原来dev分支上的那几次(C3,C4,C5)commit在rebase之后其hash值发生了变化,不在是当初在dev分支上提交的时候的hash值了,但是提交的内容被全部复制保留了,并且整个master分支的commit记录呈线性记录