项目是一个人独立开发的,master都是开发完的版本,v1.0,v1.1,v1.2……新开发任务时,从master checkout一个新的分支出来,进行开发,当开发完毕,我checkout到master时,出现了很多冲突文件,很不解,项目都是我一个人开发的,为什么会出现冲突呢,在经过问题排查时发现,我在dev分支上进行开发时,当时master上要修改一个小东西,就在master上进行了修改,然后进行了amend提交,造成了checkout分支时master的commit id和现在的commit id不一样了。所以在合并时,发现两次commit id不一致,就把所有不同的文件标记为冲突,而不是自动合并,需要手动合并。解决办法就是在把master分支的head指针reset到当时checkout时的commit id上,然后再进行合并生成新的提交就不会出现冲突了。
这个问题的原因就是checkout新分支时,假设master的HEAD指针为1,新分支里面的最新commit id也为1,新分支然后就行1开发往后添加很多commit,当master合并时,只是将head指针移动了而已,但是如果master的head指针commit id在新的分支上不存在时,git就认为在master有别人提交过内容(包括你自己),这时HEAD指针就不能简单的移动到新分支的头部了,必须将master的HEAD指针和新分支的HEAD指针处的内容进行合并才能merge,所以一旦在开了新分支时,在master分支上进行了任何提交,新分支合并时就会出现冲突,切记,切记。
时间: 2024-10-08 23:22:44