zoukankan      html  css  js  c++  java
  • git pull时冲突的几种解决方式

    一.忽略本地修改,强制拉取远程到本地

    主要是项目中的文档目录,看的时候可能多了些标注,现在远程文档更新,本地的版本已无用,可以强拉

    git fetch --all
    
    git reset --hard origin/dev
    
    git pull
    

    关于commit和pull的先后顺序,commit——》pull——》push 和 pull——》commit——》push的顺序,两种情况都遇到过代码冲突。解决方法如下:

    二.未commit先pull,视本地修改量选择revert或stash

    // 场景
    同事 有新提交
    我 没有pull -> 修改了文件 -> pull -> 提示有冲突
    

    1.本地修改量小

    -> revert(把自己的代码取消) -> 重新pull -> 在最新代码上修改 -> [pull确认最新] -> commit&push
    

    2.本地修改量大,冲突较多

    有两种方式处理

    -> stash save(把自己的代码隐藏存起来) -> 重新pull -> stash pop(把存起来的隐藏的代码取回来 ) -> 代码文件会显示冲突 -> 右键选择edit conficts,解决后点击编辑页面的 mark as resolved->  commit&push
    
    -> stash save(把自己的代码隐藏存起来) -> 重新pull -> stash pop(把存起来的隐藏的代码取回来 ) -> 代码文件会显示冲突 -> 右键选择resolve conflict -> 打开文件解决冲突 ->commit&push
    

    另外,由于我是通过IDEA来操作git的,所以显示冲突时,我是在图形化界面操作的示意如下:

    我们选择项目右键--Git--Repository--Stash Changes

    在Message中随便取个名字,然后点击Create Stash。

    以上几步的操作,其实就是把你在本地做的改变,通过stash先在git栈中保存起来(因为你没有commit嘛,对比先commit再pull,你会发现 先commit再pull会比较方便,(commit操作就是类似于把改变先存起来吧。。个人理解、、))。

    stash完后你会发现你本地进行的一些修改都已经不存在了,README文件也回到了之前的样子

    这样我们就可以和远程仓库合并了,(我们已经把冲突先去掉了)。git pull 顺利成功。

    现在我们再把之前保存的更改取出来

    选择项目右键--Git--Repository--UnStash Changes

    选择刚刚我们命名的那个更改记录,我这里就是第一个。

    然后我们点Apply Stash,来到如下窗口,提示有代码冲突

    Accept Yours 就是直接选取本地的代码,覆盖掉远程仓库的

    Accept Theirs 是直接选取远程仓库的,覆盖掉自己本地的

    我们选择Merge,自己手动行进选择、修改。

    这里左边部分是你本地仓库的代码,右边部分是远程仓库的代码,中间的result就是你修改之后的结果。左下角的Accept Left 和

    Accept Right其实就相当于是之前的 Accept Yours 和 Accept Theirs 右下角的Apply是确认合并,Abort是取消合并。

    我们在result中修改好自己想要merge的代码,然后点击Apply。

    点yes.

    这样我们就解决了冲突,解决完冲突后记得要再commit一次,分别更新本地和远程仓库的代码,这里我们可以选择commit and push

    点击push

    可以看到已经push成功了,此时我们再查看下远程仓库的README.md和本地仓库的README.md

    三.已commit未pull,视本地修改量选择reset或直接merge

    // 场景
    同事 有新提交
    我 没有pull -> 修改了文件 -> commit -> pull -> 提示有冲突
    

    1.修改量小,直接回退到未提交的版本(可选择是否保存本地修改)

    如果本地修改量小,例如只修改了一行,可以按照以下流程

    -> reset(回退到未修改之前,选hard模式,把自己的更改取消) -> 重新pull -> 在最新代码上修改 -> [pull确认最新] -> commit&push
    
    ps:实际上完全可以采取直接merge的方法,这里主要是根据尽量避免merge的原则,提供一种思路
    

    2.修改量大,直接merge,再提交(目前常用)

    -> commit后pull显示冲突 -> 手动merge解决冲突 -> 重新commit -> push
    

    Accept Yours 就是直接选取本地的代码,覆盖掉远程仓库的

    Accept Theirs 是直接选取远程仓库的,覆盖掉自己本地的

    我们选择Merge,自己手动行进选择、修改。

    这里左边部分是你本地仓库的代码,右边部分是远程仓库的代码,中间的result就是你修改之后的结果。左下角的Accept Left 和

    Accept Right其实就相当于是之前的 Accept Yours 和 Accept Theirs 右下角的Apply是确认合并,Abort是取消合并。

    我们在result中修改好自己想要merge的代码,然后点击Apply。

    点yes.

    这样我们就解决了冲突,解决完冲突后记得要再commit一次,分别更新本地和远程仓库的代码,这里我们可以选择commit and push

    点击push

    可以看到已经push成功了,此时我们再查看下远程仓库的README.md和本地仓库的README.md

    站在巨人肩膀上摘苹果

    https://www.cnblogs.com/zjfjava/p/10280247.html

    https://www.cnblogs.com/JonaLin/p/11388955.html

  • 相关阅读:
    报错:Message is larger than modules
    报错:常量字符串过长
    C#监控WinCE手机用户操作的程序,并通过usb连接发送到pc监听服务
    .Net Compact Framework coredll.dll API列表
    Oracle任意日期得到该周第一天的日期
    ORACLE查看锁表进程及杀死进程的语句
    客户端js与服务端通过BASE64进行交互
    为什么在powerdesigner成功将表生成到oracle,用sql操作提示表或视图不存在
    gprof的简单实用
    学习笔记fputs与printf
  • 原文地址:https://www.cnblogs.com/eternityz/p/13595862.html
Copyright © 2011-2022 走看看