git冲突解决(一)
只要面试官问一些GIt相关问题,是辨别真假程序员的有效手段之一,GIt提交、拉取、分支、冲突解决是在多人协作当中经常遇到的问题,不可能没有遇到!在多人协作开发项目的时候,不可避免的会遇到代码冲突,虽说我们每次再开发以前要拉取代码,但是冲突还是不能彻底避免,这个时候就需要我们的小伙伴熟练掌握解决冲突的技能显得尤为重要
产生冲突的场景
一大早同事A来到办公室,打开电脑启动环境执行git pull(拉取代码,修改代码之前一定要先拉取养成良好的习惯,尽可能的减少代码冲突),开始修改项目的首页的Bug,啪啪啪…
一会儿同事B气喘吁吁的坐下来,同样的开机启动环境git pull,然后同样去修改首页的Bug,啪啪啪…
看似风平浪静,但是掐指一算,一会儿即将可能有大事要发生,等待中…
同事A事先修改完了Bug,git push到了远程服务器,然后继续去修改其它Bug,同事B也修改完了,执行了git push,然后高高兴兴去厕所了,回来以后一看小黑窗:
报…错…了…
推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突不要慌,解决办法我给大家介绍两种,酌情选择
解决方案一(强制覆盖本地代码,你自己修改的代码即将被远程库的代码所覆盖)
把你修改的代码进行备份,然后执行命令:
git reset --hard origin/master
git pull
从你备份好的文件当中把你写的代码拿过去,修改完成再进行git push
解决方案二(合并远程库和你本地的代码)执行命令:
git fetch 更新远程仓库文件
git diff master origin/master 本地文件和远程仓库文件进行对比
git merge origin/master 自动合并
根据需求手动删除不必要的代码,修改完成git push到远程仓库
小命令:最后,补充一个我之前在工作当中经常使用的查看Git提交日志的命令,除了git log之外还有一个很好用“gitk”在小黑窗中执行一下,会有神奇的事情发生…
git冲突解决(二)
1、git冲突的场景
情景一:多个分支代码合并到一个分支时;
情景二:多个分支向同一个远端分支推送代码时;
实际上,push操作即是将本地代码merge(合并)到远端库分支上。
关于push和pull其实就分别是用本地分支合并到远程分支 和 将远程分支合并到本地分支
所以这两个过程中也可能存在冲突。
git的合并中产生冲突的具体情况:
<1>两个分支中修改了同一个文件(不管什么地方)
<2>两个分支中修改了同一个文件的名称
两个分支中分别修改了不同文件中的部分,不会产生冲突,可以直接将两部分合并。
2、冲突解决方法
情景一:在当前分支上,直接修改冲突代码—>add—>commit。
情景二:在本地当前分支上,修改冲突代码—>add—>commit—>push
3、实战演示
(1)情景
本地库中两个不同分支,修改同一个文件同一代码块,两分支先后将修改合并到master分支上,master在合并第二个分支代码时,报错:合并冲突。
(2)本地库
<1> master分支
<2> 建立两个分支
<3> 两分支修改提交
aBranch分支:
bBranch分支:
(3)合并分支产生冲突
合并aBranch分支(将aBranch分支合并到当前master分支上):
注:
git merge:默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支。
使用–no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,建议采用这种方法。
再合并bBranch分支,产生冲突:
(4)解决冲突
在当前分支上(master),找到冲突文件,直接修改冲突代码,add,commit。
注:简单方法,使用vim修改,cat查看冲突文件。(注意要删除git自动生成的冲突代码分隔符)
(5)完成冲突解决