多人协作使用git如何解决冲突?
什么情况会产生冲突
-
git merge XXX(合并分支时的冲突):
当你尝试将一个分支的更改合并到另一个分支时,如果两个分支都修改了相同的文件的相同部分,Git 将无法自动解决冲突,因此会发生冲突。你需要手动解决这些冲突,然后提交解决后的文件。 -
git pull(拉取远程更改时的冲突):
当你从远程存储库中拉取更改时,如果你的本地分支和远程分支都有不同的更改,Git 将无法自动合并它们,导致冲突。你需要手动解决这些冲突,然后提交解决后的文件。 -
重置、回退或修改提交时的冲突:
如果你使用git reset、git revert或修改提交历史的操作,可能会导致冲突。这是因为你正在改变已提交的历史,而其他人可能已经基于旧的提交历史进行了工作。 -
同时编辑相同文件时的冲突:
当多个开发人员在相同文件的相同部分进行更改并提交时,会发生冲突。Git 会检测到这些更改的冲突,并要求手动解决。 -
合并请求 (Pull Request) 冲突:
在协作项目中,当你提交一个合并请求并请求将你的更改合并到主分支或其他分支时,如果维护者或其他贡献者对相同的文件进行了更改,会导致冲突。这时需要解决冲突才能合并你的请求。
减少冲突
-
通信与协作:保持团队成员之间的良好沟通,确保每个人都了解项目的整体方向和进展。协同开发时,及时分享和讨论代码更改计划,以避免不必要的冲突。
-
分支策略:采用合理的分支策略,例如使用特性分支、发布分支等。明确分支的用途和生命周期,以减少分支合并时的冲突。
-
小而频繁的提交:鼓励团队成员频繁提交小规模的更改,而不是一次性提交大型更改。这可以减少同时修改相同文件的机会,降低冲突概率。
-
合并频率:定期合并主分支的更改到个人分支,以保持你的分支与主分支同步。这可以减少主分支与个人分支之间的差异,减少冲突。
-
版本控制工具设置:利用版本控制工具的设置,如
.gitignore文件屏蔽不需要提交的文件,提交时会自动忽略调这些文件。 -
清晰的变更计划:在项目中有一个清晰的变更计划,以便团队成员了解即将进行的更改,可以提前预防冲突。
解决冲突
比如我就使用git pull 拉取远程的代码,此时有个文件相同的位置我本地改动了,远程也被改了,那么我在没有保存改动 直接pull是会报错的:

为了顺利拉取远程的代码,通常有如下两种解决方式:
- 先执行git add 、git commit再执行git pull。
- 或者 使用git stash save 先把本地改动暂存一下。执行git pull 后,再使用git stash apply stash@{XX},如何解决冲突。
使用第一种方法,pull之后就会有需要解决冲突的文件

我使用的vscode编译器。可以看出这个文件的16行开始有冲突,本地用的“文件1111”,远程被改成了“文件9”。这里有提示,使用你本地的还是远程的,或者accept both changes两个改动都保留。具体用哪个,怎么改都看自己的情况了。
使用stash,命令暂存修改的文件

**注意:**我截图中的git stash apply stash@{0}命令是报错了的,原因就是我直接使用的vscode的终端powershell,可能内部转换错误。然后我使用的git bash终端就没问题了。其实可以把git 配置到vscode的终端(可以自己去配一下,我就是懒),这样就不用额外打开git bash命令操作了。
然后使用git pull。再使用git stash apply stash@{}。这里的序号可以使用git stash list 查看。看你想使用存储区中的哪个改动。
然后再解决冲突提交就是。
多人开发正确的提交步骤
- 注意push 前一定要先pull,不然可能会覆盖远程更改。虽然很多情况会提示push 失败,先解决冲突再提交。但是工具提醒哪有自己pull 靠谱,万一覆盖了呢,更麻烦不是。
- 提交合并代码尽量频繁一点,不然一下子解决几十上百个文件的冲突就难受啦
- 多人合作一个分支就习惯性写代码(分支有改动或者每天上班前)之前pull。写完(任务量大也尽量一天执行一次)push一次。不用等着最后开发完成再去想着解决冲突。
- 分支和主线之前先git merge 主线 ,解决完冲突再合并。
补充git stash命令
git stash 命令用于保存当前工作目录中的尚未提交的更改,以便稍后恢复这些更改或在其他分支上工作。这对于临时切换到其他任务或分支,而不希望将未提交的更改混合在一起非常有用。
-
保存更改到存储区(stash):
git stash save "Your stash message"这个命令将当前的未提交更改保存到一个新的存储区(stash)中,并可选择添加一条描述消息。存储区的作用是暂时存储你的更改。
-
查看存储区列表:
git stash list这个命令可以列出你保存到存储区的所有存储记录,以及它们的描述消息。
-
应用存储区中的更改:
git stash apply stash@{n}使用
apply命令可以应用存储区中的指定存储记录,n代表存储记录的编号。如果不指定n,默认应用最新的存储记录。应用存储记录后,你的工作目录会包含这些更改。 -
应用并移除存储区中的更改:
git stash pop stash@{n}pop命令与apply类似,但它会应用存储记录并从存储区中移除这个记录。 -
删除存储区中的更改:
git stash drop stash@{n}这个命令用于删除存储区中的指定存储记录,
n代表存储记录的编号。 -
清空存储区:
git stash clear这个命令会清空存储区,删除所有的存储记录。
相关文章:
多人协作使用git如何解决冲突?
什么情况会产生冲突 git merge XXX(合并分支时的冲突): 当你尝试将一个分支的更改合并到另一个分支时,如果两个分支都修改了相同的文件的相同部分,Git 将无法自动解决冲突,因此会发生冲突。你需要手动解决这些冲突,然后…...
基于【逻辑回归】的评分卡模型金融借贷风控项目实战
背景知识: 在银行借贷过程中,评分卡是一种以分数形式来衡量一个客户的信用风险大小的手段。今天我们来复现一个评分A卡的模型。完整的模型开发所需流程包括:获取数据,数据清洗和特征工程,模型开发,…...
企业拉美跨境出海面对时延情况怎么办?
随着全球化不断发展,中国企业也不断向海外拓展业务,开拓市场,增加收入来源,扩大自身品牌影响力。然而出海企业面临不同以往的困难和挑战,在其中不可避免面临的跨境网络时延问题,如何选择区域进行部署企业业…...
【vector题解】只出现一次的数字 | 电话号码的数字组合
只出现一次的数字 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。 你必须设计并…...
VS2022 开发方式
使用 C# 在VS 2022 上开发时,发现有多种项目类型可以创建。这些类型放一起容易搞混,于是记录一下各种类型的区别。 这里主要介绍windows控制台程序、MFC程序、WPF程序、WinForm程序的特点。 创建哪种应用? 创建控制台应用 Windows控制台程序…...
【Python语言速回顾】——数据可视化基础
目录 引入 一、Matplotlib模块(常用) 1、绘图流程&常用图 编辑 2、绘制子图&添加标注 编辑 3、面向对象画图 4、Pylab模块应用 二、Seaborn模块(常用) 1、常用图 2、代码示例 编辑 编辑 编辑 …...
java实现pdf文件添加水印,下载到浏览器
java实现pdf文件添加水印,下载到浏览器 添加itextpdf依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.8</version> </dependency>文件下载到浏览器和指定路径 …...
代码随想录算法训练营第四十一天丨 动态规划part04
01背包理论基础 见连接:代码随想录 416. 分割等和子集 思路 01背包问题 背包问题,大家都知道,有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解…...
PyCharm免费安装和新手使用教程
简介 PyCharm是一款由JetBrains公司开发的Python集成开发环境(IDE)。它提供了一系列强大的功能,包括自动代码完成、语法高亮、自动缩进、代码重构、调试器、测试工具、版本控制工具等,使开发者可以更加高效地开发Python应用程序。…...
使用Python的Scikit-Learn进行决策树建模和可视化:以隐形眼镜数据集为例
决策树是一种强大的机器学习算法,它在数据挖掘和模式识别中被广泛应用。决策树模型可以帮助我们理解数据中的模式和规则,并做出预测。在本文中,我们将介绍如何使用Python的Scikit-Learn库构建决策树模型,并使用Graphviz进行可视化…...
开源软件:释放创新的力量,改变数字世界的游戏规则
在充满活力的技术领域,创新是至高无上的,有一种方法已获得显著的吸引力——开源软件。开源软件凭借其透明、协作和无限可能性的精神,彻底改变了我们开发、共享和定制应用程序的方式。从操作系统到数据分析工具,其影响跨越了多个领…...
【QT】鼠标常用事件
新建项目 加标签控件 当鼠标进去,显示【鼠标进入】,离开时显示【鼠标离开】 将QLable提升成自己的控件,然后再去捕获 添加文件 改继承的类名 提升类 同一个父类,可以提升 效果 现在代码就和Qlabel对应起来了。 在.h中声明&…...
LuatOS-SOC接口文档(air780E)--mlx90640 - 红外测温(MLX90640)
常量# 常量 类型 解释 mlx90640.FPS1HZ number FPS1HZ mlx90640.FPS2HZ number FPS2HZ mlx90640.FPS4HZ number FPS4HZ mlx90640.FPS8HZ number FPS8HZ mlx90640.FPS16HZ number FPS16HZ mlx90640.FPS32HZ number FPS32HZ mlx90640.FPS64HZ number FPS6…...
java连接本地数据库可以简写为///
java连接数据库配置文件写为: server:port: 8091 spring:application:name: user-managerdatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/user?serverTimezoneAsia/Shanghai&characterEncodingutf-8username: root…...
基于springboot漫画动漫网站
基于springbootvue漫画动漫网站 摘要 基于Spring Boot的漫画动漫网站是一个精彩的项目,它结合了现代Web开发技术和漫画爱好者的热情。这个网站的目标是为用户提供一个便捷的平台,让他们能够欣赏各种漫画和动漫作品,与其他爱好者分享他们的兴趣…...
autoFac 生命周期 试验
1.概述 autoFac的生命周期 序号名称说明1InstancePerDependency每次请求都创建一个新的对象2InstancePerLifetimeScope同一个Lifetime生成的对象是同一个实例3SingleInstance每次都用同一个对象 2.注 InstancePerLifetimeScope 同一个Lifetime生成的对象是同一个实例&#x…...
foreach、for in 和for of的区别?
forEach,for...in 和 for...of 是 JavaScript 中用于遍历数据的三种不同的结构。它们在遍历数组、对象和可迭代对象(如 Set 和 Map)时非常有用。尽管它们都可以用于循环遍历,但它们之间存在一些重要的区别: forEach&a…...
【Effective C++】条款45: 运用成员函数模板接受所有兼容的类型
假设有如下继承结构: class Top{}; class Middle: public Top{}; class Bottom: public Middle{};public继承意味着is-a关系,所有的基类都是派生类,但反之则不是,例如所有的学生都是人,但不是所有的人都是学生. 派生类到基类的指针可以直接隐式转换 Top* pt1 new Middle; T…...
WSL1 安装 debian xfce 用xrdp 导入远程桌面
凑合能用 晃晃行 晃晃不行 而且比较卡 还经常报崩溃 sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils apt install locales -y 安装过完应该会提示设置locales,如果安装完之后想要更改相关设置,可以使用如下命令重新设置loca…...
WPF RelativeSource属性-目标对象类型易错
上一篇转载了RelativeSource的三种用法,其中第二种用法较常见,这里记录一下项目中曾经发生错误的地方,以防自己哪天忘记了,又犯了同样错误—WPF RelativeSource属性-CSDN博客 先回顾一下: 控件关联其父级容器的属性—…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
