1.原因
git rebase需要解多次冲突的原因是因为***本地分支***【master】对文件A进行了n次commit,而别的分支【dev】对文件A进行了1次commit,但是***本地分支***【master】提交的n次commit都与【dev】分支的1次commit有冲突,
那么当【master】分支对【dev】分支进行rebase的时候就会产生n次冲突。
2.举例
2.1.创建git仓库
创建git仓库并创建空文件test.txt
2.2.创建dev分支
2.3.dev分支进行1次commit
2.4.master进行3次commit
master分支进行第一次提交,内容为master 1
master分支进行第二次提交–省略,内容为master 2
master分支进行第三次提交,内容为master 3
2.5.分支更新
在【master】进行rebase,会造成3次冲突需要解决,因为在【master】的3次commit都与【dev】的1次commit冲突,
2.5.1.一次解冲突
【master 1】与【dev】产生的冲突
2.5.2.二次解冲突
【master 2】与{【master 1】+【dev】}产生的冲突
2.5.2.三次解冲突
【master 3】与{【master 1】+【master 2】+【dev】}产生的冲突
3.解决办法
解决办法就是在rebase之前,将本地的多次commit合并成一个commit
3.1.回归初始状态
3.2.master多次commit合并
3.2.1.查看git log
3.2.2.合并多次commit
这时我们需要将【e33】 – 【b03】 – 【0a9】这3次commit合并,这时需要执行
git rebase -i HEAD~3 (从head往下找近三次commit)
或者
git rebase -i 5753fc5b5959380ec999f8e51252019487860f0f
(从head找到5753截止,但不包括5753)
这时进入到commit合并编辑页
将除第一个以外的commit对应的pick修改为squash,自上而下是commit的顺序,
保存退出,若有冲突提示修改
修改后使用
git add .
git rebase --continue