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

posted @   未月廿三  阅读(9406)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示