什么情况下会产生冲突?

第一种情况

你修改了本地的某一份文件里面的内容,准备提交到github仓库上,恰好github仓库上的仓库的这份文件被另外一个人给修改了,即此时你本地对那份文件做了修改,远程仓库的那份文件也被做了修改,这样等你提交远程仓库的时候,冲突就产生了,不管你们修改的是不是那份文件的同一个地方,都会被识认为是冲突。

第二种情况

你没有修改原本的文件,但是添加了新的文件,而远程仓库中,部分原本的文件被人更改了,那当你提交的时候也会发生冲突,很好理解,因为你本地文件内容旧了,需要用git pull origin master,拉取远程仓库最新的文件内容到本地,更新本地的文件内容,不用怕,只是更新旧文件的内容,你自己的文件不会被删掉(清楚“ 合并 ”这个概念,两个集合取并集,除非其中两个集合的同一个元素的值发生了异议,才会产生冲突,这时候才需要去解决冲突),更新完本地旧文件后,你就可以安心的提交你想提交的内容了。

值得注意的是,合并远程仓库的新内容到本地时,会自动识别成一次记录,备注默认的是一句“merge ….基本清了,大概意思就是合并远程仓库的内容到本地仓库….”,你可以默认,也可以更改为自己想要的备注。

第一种情况怎么解决?

首先拉取远程仓库到本地git pull origin master

此时你用git bash的话,会发现所在的分支提示会变成下面这样的:(master|MERGING)
mark

这说明已经拉取成功,让你解决冲突之后,就可以提交

一般冲突的地方文件内容会以这样的形式提示,让你更改

mark

更改完之后,保存文件,会看到分支的提示有变回(master)了,这时git会认为你已经解决冲突了,可以提交到远程仓库

重新使用add、commit、push命令就能提交成功了

应该注意什么

可能你也发现了,在团队合作的情况下,每个人都拥有对某个仓库的读写权限,每个人都在提交,发生像上面说到的冲突是在所难免的。一旦发生冲突,你可以通过拉取远程仓库的内容,借助git,比较内容冲突在哪里并更改完文件后(只要改了冲突的地方就行,不管有没有跟本地的还是跟仓库的一样),就可以提交到远程的仓库。这很可能就会导致别人原本正确的东西被你给弄错了。

具体的引用网上的一段话:

仔细对比,取综合的并集,就是尽量把所有不同的文件保留,共同的只留一份

个人的一点经验:多人协作开发的时候,如果出现了你没有改过的文件跟你冲突了,一定要去找到当事者,说清楚是如何冲突,然后协商解决,千万不要擅自拉别的分支去试图解决冲突,或找文件覆盖.同时记住,解决了之后,要add 和 commit 最后push.为保证万无一失,最后在冲突都解决之后,重启项目,特别是指服务器项目,保证至少不会有立即奔溃的现象发生.然后才去提交,push.

提交的时候,一定要保持清醒,先搞清楚自己要提交的文件之间的关系,然后再提交,这样才不会有文件缺失的问题,造成奔溃.

如果任务比较多,又建议开多个分支,分别进行开发.还是老话,一定要清楚自己在各个分支上做了什么,自己要提交的是什么.最好是能做个详细的笔记.好记性不如烂笔头.