多人协作使用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博客 先回顾一下: 控件关联其父级容器的属性—…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
