【Git】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版本库管理的问题,而且文件状态实时同步也是一大便捷之处。

  • 13
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值