git提交总体分为add、commit、pull、push三个步骤,仅这三个操作一般只适合单人开发的项目;几乎没有某个工程是一个人能够完成的;多人开发必然会遇到多人提交,代码冲突时有发生;那么如何解决代冲突?
当你和合作者同时修改了同一行代码时,你在项目中直接进行git pull
命令时,就会产生冲突:
error: Your local changes to the following files would be overwritten by merge: xxxxx ; Please commit your changes or stash them before you merge
1)、我们可以按照所提示的第一种方式,先add
commit
本地代码至本地的git仓库;再执行 git pull
命令,这样本地git会将远程仓库和本地最新的一次 commit 记录合并,产生一个新的 merge 记录,推送到远程 git 仓库后,通过工具可以查看版本树的变化:
黑色线条为版本主干,红色就是本次 merge 时,git 将冲突在本地解决后,生成一个新的支,
git push
后又合并到主干。
2)、也可以先stash push -m 'xxx'
,这样本地工作区恢复到最后一个更新远程仓库时的状态,此时进行git pull
命令,由于工作区无改变内容,就可以顺利的同步到最新代码,这个时候再将刚刚储存在暂存区的文件取出来,用来在工作区进行合并 git stash pop
,解决好冲突行,再次进行add
commit
push
;解决冲突时要注意,由于更改的内容是从 stash
中提取出来的,所以自己修改的内容为最后的修改
至此,一般情况下会自动合并;但是如果更新下来的代码和本地你自己修改的代码同一行有差异,这时候就需要手动合并:打开需要手动合并的文件,<<<<<<
下的代码,表示旧的代码片段,=======
下的代码,表示新的代码片段,自己判断哪些要删除,哪些要保留的内容,保存后就可以按正常操作流程提交了。
以上两种方式都可以,区别是:
第一种方式会造成版本树看起来比较乱,提交时备注的信息会被merge
生成的信息覆盖,很久以后查询历史提交记录造成不便;
第二种方式会让整个版本树看起来很简洁,几乎只有一条黑色的节点线自下而上,每个人的提交信息一览无余,清晰可见;
网友评论