【Git】TortoiseGit代码冲突解决方法

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

TortoiseGit冲突解决方法


场景一本地相同文件冲突

  • 冲突场景User1和User2修改、拉取相同文件

User1修改文件C内容提交并推送成功
User2修改文件C内容拉取提示合并错误。

在这里插入图片描述

冲突分析
此时文件状态还未显示冲突因为本地文件只是修改并未提交到本地暂存区而此时从远程拉取的文件已保存在暂存区但又无法和本地的修改直接合并所以pull操作被中止。从提示的错误信息Please commit your changes or stash them before you merge也可以得知此时需要先commit提交或Stash save暂存才能将User1和User2的修改合并。

  • 解决方法

User2选择文件C右击选择Stash save保存贮藏将文件C的修改暂存。在Stash save 窗口可以编辑相应的注释。如下

在这里插入图片描述
在这里插入图片描述
此时打开文件C可以看到之前的修改已经隐藏回到未修改时的状态。

在这里插入图片描述

贮藏修改后再执行pull操作即相当于在未修改本地版本库前进行pull操作此时 User2本地文件C的版本与User1、服务端均相同贮藏的内容不会对此次pull的内容产生任 何影响。

User2可以有两个选择

右键选择一Pop Stash弹出贮藏将之前的贮藏内容弹出继续合并到当前文件

提示
Pop Stash过程中出提示失败是因为此时文件C的版本和Stash Save时的版本已经不一致即Stash进、出时的版本改变所以需要手动解决冲突。

在这里插入图片描述
点击yes进入编辑冲突的过程后续的操作过程参照场景二的解决方法即可。

在这里插入图片描述

右键选择二

Stash List贮藏列表在弹出的对话框进行贮藏内容管理例如删除贮藏重新对本地文件进行修改、提交、推送。

场景二服务端相同文件冲突

  • 冲突场景User2和User1修改、提交、推送相同文件

User1修改文件B内容提交并推送成功
User2修改文件B内容提交并推送提示冲突。

在这里插入图片描述

  • 解决方法

User2执行pull操作此时文件B显示冲突状态打开文件B如下

说明
<<<<<<<HEAD 与 =======			之间的是user2本地修改的内容
=======>>>>>>>哈希值-1	之间的是user1已经更新到服务器的内容

手动解决冲突文件可以使用两种方法

方法1
直接修改文件B删除标识符保留所需内容此方法只适合修改内容较少的 情况下。修改后如下
在这里插入图片描述
方法2
使用TortoiseGitMerge工具打开方法右击文件选择“Edit Conflict(编辑冲突)”。 此时自动生成文件B的三个版本并且对应显示在工具窗口。编辑完内容后 选择文件另存并覆盖冲突文件B。关闭窗口后其他三个文件自动消失。
在这里插入图片描述

说明文件B的三个不同版本
BASE.txt文件	B文件对应User1、User2、服务端共同的历史版本
LOCAL.txt文件	B文件对应User2本地修改的版本
REMOTE.txt文件	B文件对应User1提交更新的版本也是当前服务端的版本。

冲突文件修改完成后文件仍然显示冲突状态。再次右击文件选择“Resolve…(解决冲突)”。正常弹出如下界面确定即可。
在这里插入图片描述

注意
如果此时提示如下界面是因为当前TortoiseGit与GitBash软件版本不兼容将TortoiseGit更新为最新版即可。
在这里插入图片描述

解决完冲突后如下。User2可正常执行commit、push操作服务端将更新User1和User2的修改。

在这里插入图片描述

场景三服务端不同文件冲突

  • 冲突场景User2和User1修改、提交、推送不同文件

User1修改文件A内容提交并推送成功
User2修改文件B内容提交并推送提示冲突。

在这里插入图片描述

  • 解决方法

User2执行pull操作勾选“No Fast Forward”拉取服务器文件A
User2再执行push操作A、B文件均更新到服务器。

在这里插入图片描述

场景四服务端文件名冲突

  • 冲突场景User2和User1重命名同一文件

User1重命名文件A为A-1提交并推送成功
User2重命名文件A为A-2提交并推送提示冲突。

在这里插入图片描述

  • 解决方法

User2执行pull操作此时文件A-1和A-2显示冲突状态。

在这里插入图片描述
在上述窗口点击resolve解决或者右键本地冲突文件选择“Edit Conflict编辑冲突”进入文件冲突编辑窗口。

说明文件A的三个命名版本
A-1.txt文件	User1已更新到服务端的文件名
A-2.txt文件	User2本地修改的文件名
A.txt文件		User1、User2、服务端的历史文件名

在这里插入图片描述
根据需要保留相应的文件名例如只保留A-2文件依次右键文件A-1和文件A选择“Edit conflict编辑冲突”执行删除文件如下

在这里插入图片描述
对于A-2文件选择“Edit conflict编辑冲突”后执行Create创建文件如下

在这里插入图片描述
创建文件A-2后冲突文件列表显示为空文件A-2的状态将恢复为已提交状态如下

在这里插入图片描述
此时User需要先执行commit操作再执行push操作如下

在这里插入图片描述

提示
此时文件A-2显示已提交状态是因为文件在冲突之前已经被提交到暂存区但仍然不能直接执行push操作是因为在解决冲突过程中原来在本地暂存区的历史文件A和从远程pull到本地暂存区的文件A-1已经被删除所以需要先将这两个文件的更新重新提交。


小结

TortoiseGit可视化界面很好的解决了用户习惯在Windows系统环境下使用界面操作进行Git版本库管理的问题而且文件状态实时同步也是一大便捷之处。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6