Git冲突解决

Git冲突解决

2018.12.08 19:17:18字数 678阅读 7,307
导语
  • 只要面试官问一些GIt相关问题,是辨别真假程序员的有效手段之一,GIt提交、拉取、分支、冲突解决是在多人协作当中经常遇到的问题,不可能没有遇到!在多人协作开发项目的时候,不可避免的会遇到代码冲突,虽说我们每次再开发以前要拉取代码,但是冲突还是不能彻底避免,这个时候就需要我们的小伙伴熟练掌握解决冲突的技能显得尤为重要。
产生冲突的场景
  • 一大早同事A来到办公室,打开电脑启动环境执行git pull(拉取代码,修改代码之前一定要先拉取养成良好的习惯,尽可能的减少代码冲突),开始修改项目的首页的Bug,啪啪啪...
  • 一会儿同事B气喘吁吁的坐下来,同样的开机启动环境git pull,然后同样去修改首页的Bug,啪啪啪...
  • 看似风平浪静,但是掐指一算,一会儿即将可能有大事要发生,等待中...
  • 同事A事先修改完了Bug,git push到了远程服务器,然后继续去修改其它Bug,同事B也修改完了,执行了git push,然后高高兴兴去厕所了,回来以后一看小黑窗:


     
报.......错......了.......
  • 推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突不要慌,解决办法我给大家介绍两种,酌情选择
解决方案一(强制覆盖本地代码,你自己修改的代码即将被远程库的代码所覆盖)
  • 把你修改的代码进行备份,然后执行命令:
  1. git reset --hard origin/master
  2. git pull
  3. 从你备份好的文件当中把你写的代码拿过去,修改完成再进行git push
解决方案二
  • (合并远程库和你本地的代码)执行命令:
    1. git fetch 更新远程仓库文件
    2. git diff master origin/master 本地文件和远程仓库文件进行对比
    3. git merge origin/master 自动合并
    4. 根据需求手动删除不必要的代码,修改完成git push到远程仓库
      1. git reset 使用及回滚
        原创AI小兵 最后发布于2018-09-21 09:37:26 阅读数 14312 收藏
        展开
        目录

        一、git reset 参数

        1. --soft  

        2.  --mixed  

        3.  --hard  

        二、 如何回滚文件

        1. 修改完,还未执行git add 

        2.使用git add 提交到暂存区,还未commit之前

        3.已经git commit,还未git push

        4.已经git push  

        一、git reset 参数
         

        1. --soft  
        仅仅移动当前Head指针,不会改变工作区和暂存区的内容  


        2.  --mixed  
        是reset的默认参数,移动head指针,改变暂存区内容,但不会改变工作区 


        3.  --hard  
        当前head指针、工作区和暂存区内容全部改变  


        那我个人的理解,--soft用处不是很多,当commit之后想撤回commit,但还不想覆盖工作区内容时,使用--mixed;当想完全回滚时,使用--hard来覆盖工作区。

        二、 如何回滚文件
        1. 修改完,还未执行git add 
        git checkout .
        使用暂存区的文件覆盖工作区,所以执行完git add .之后,再执行该命令是无效的  
        git checkout .和git add .是一对反义词

        2.使用git add 提交到暂存区,还未commit之前
        git reset  先用Head指针覆盖当前的暂存区内容
        git checkout . 再用暂存区内容覆盖工作区内容
        或者使用
         

        git reset --hard 直接使用head覆盖当前暂存区和工作区
        3.已经git commit,还未git push
        git reset --hard origin/master
         从远程仓库把代码取回来,然后覆盖本地仓库、本地暂存区和工作区  

        或者使用

        git reset --hard last_commit_id
          覆盖本地仓库、暂存区和工作区,其中查看last_commit_id命令为

        git log
          或者使用

        git reset --mixed last_commit_id  
        覆盖本地的暂存区,再执行
         

        git checkout . 覆盖本地工作区
        4.已经git push  

          那就没办法了

        实际经常使用的情况有两种
        1. 修改错了,完全覆盖掉,使用
         

        git reset --hard commit_id
        2. 错误的把大文件添加到了缓存区,使用

        git reset
        撤回添加
         
        ————————————————
        版权声明:本文为CSDN博主「AI小兵」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
        原文链接:https://blog.csdn.net/edric1261234/article/details/82796506

原文地址:https://www.cnblogs.com/flintlovesam/p/12449700.html