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

本文介绍了使用TortoiseGit解决四种常见冲突的方法,包括本地相同文件冲突、服务端相同文件冲突、服务端不同文件冲突和服务端文件名冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


场景一:本地相同文件冲突

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

### 如何在IDE中解决Git提交代码冲突 #### 使用 IntelliJ IDEA 解决 Git 冲突 当发生冲突时,在IntelliJ IDEA中打开受影响的文件会看到冲突标记。这些标记分为三个部分:“本地”,“入站”以及“两者都”。通过编辑器可以直接修改冲突区域的内容来保留想要的部分。 对于已经解决冲突的文件,使用 `git add <file>` 命令将其状态更新为已处理[^1]。之后运行`git commit` 来完成整个过程并记录此次变更。 ```bash git add . git commit -m "Resolved conflicts" ``` #### 利用 VS Code 处理 Git 冲突 VS Code 配备了内建的功能支持开发者更高效地管理源码版本控制问题。具体来说: - **Diff 工具**:此特性允许用户直观对比两个不同版本间的区别,从而辅助判断应采纳哪一方改动或是自定义融合方案[^2]。 - **GitLens 扩展**:安装该插件后可以获得增强型历史追踪能力,包括但不限于查看某行代码由谁编写及其最后修订时刻等信息,这无疑能极大地方便理解当前所面临的具体情况以便更好地做出决策。 一旦确认好解决方案,则同样需要执行如下操作使更改生效: ```bash git add conflicted_file_path git commit -m "Conflict resolution message" ``` #### 采用 TortoiseGit 应对手动合并场景 如果是在命令行环境下准备把测试分支(test)上的最新成果集成至主干(master),那么先切换工作区到目标接收端(`master`)再发起合并不失为一种常见做法;而面对可能存在的分歧项则可通过图形界面指导下的交互方式逐一攻克直至全部消除为止。最终别忘了推送同步远端仓库以保持一致[^3]。 ```bash git checkout master git merge origin/test # Handle any conflict via GUI or manually within editor. git push origin master ``` #### Stashing 变化前后的注意事项 在一个团队协作环境中,有时为了暂时搁置未完成的工作去应对突发的任务调整(比如修复紧急bug),可以考虑运用 stash 功能保存现有进度而不影响其他成员正常运作。待时机成熟恢复原状继续之前任务之时,可能会遭遇因他人先行提交引起的新一轮冲突挑战。此时应当仔细核对提示信息中的红色标注文档位置,针对性开展调解作业直到所有矛盾得到妥善处置后再推进下一步骤[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值