多人协作使用git如何解决冲突?

news2024/12/30 1:32:14

什么情况会产生冲突

  1. git merge XXX(合并分支时的冲突):
    当你尝试将一个分支的更改合并到另一个分支时,如果两个分支都修改了相同的文件的相同部分,Git 将无法自动解决冲突,因此会发生冲突。你需要手动解决这些冲突,然后提交解决后的文件。

  2. git pull(拉取远程更改时的冲突):
    当你从远程存储库中拉取更改时,如果你的本地分支和远程分支都有不同的更改,Git 将无法自动合并它们,导致冲突。你需要手动解决这些冲突,然后提交解决后的文件。

  3. 重置、回退或修改提交时的冲突:
    如果你使用 git resetgit revert 或修改提交历史的操作,可能会导致冲突。这是因为你正在改变已提交的历史,而其他人可能已经基于旧的提交历史进行了工作。

  4. 同时编辑相同文件时的冲突:
    当多个开发人员在相同文件的相同部分进行更改并提交时,会发生冲突。Git 会检测到这些更改的冲突,并要求手动解决。

  5. 合并请求 (Pull Request) 冲突:
    在协作项目中,当你提交一个合并请求并请求将你的更改合并到主分支或其他分支时,如果维护者或其他贡献者对相同的文件进行了更改,会导致冲突。这时需要解决冲突才能合并你的请求。

减少冲突

  1. 通信与协作:保持团队成员之间的良好沟通,确保每个人都了解项目的整体方向和进展。协同开发时,及时分享和讨论代码更改计划,以避免不必要的冲突。

  2. 分支策略:采用合理的分支策略,例如使用特性分支、发布分支等。明确分支的用途和生命周期,以减少分支合并时的冲突。

  3. 小而频繁的提交:鼓励团队成员频繁提交小规模的更改,而不是一次性提交大型更改。这可以减少同时修改相同文件的机会,降低冲突概率。

  4. 合并频率:定期合并主分支的更改到个人分支,以保持你的分支与主分支同步。这可以减少主分支与个人分支之间的差异,减少冲突。

  5. 版本控制工具设置:利用版本控制工具的设置,如.gitignore文件屏蔽不需要提交的文件,提交时会自动忽略调这些文件。

  6. 清晰的变更计划:在项目中有一个清晰的变更计划,以便团队成员了解即将进行的更改,可以提前预防冲突。

解决冲突

比如我就使用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 命令用于保存当前工作目录中的尚未提交的更改,以便稍后恢复这些更改或在其他分支上工作。这对于临时切换到其他任务或分支,而不希望将未提交的更改混合在一起非常有用。

  1. 保存更改到存储区(stash):

    git stash save "Your stash message"
    

    这个命令将当前的未提交更改保存到一个新的存储区(stash)中,并可选择添加一条描述消息。存储区的作用是暂时存储你的更改。

  2. 查看存储区列表:

    git stash list
    

    这个命令可以列出你保存到存储区的所有存储记录,以及它们的描述消息。

  3. 应用存储区中的更改:

    git stash apply stash@{n}
    

    使用 apply 命令可以应用存储区中的指定存储记录,n 代表存储记录的编号。如果不指定 n,默认应用最新的存储记录。应用存储记录后,你的工作目录会包含这些更改。

  4. 应用并移除存储区中的更改:

    git stash pop stash@{n}
    

    pop 命令与 apply 类似,但它会应用存储记录并从存储区中移除这个记录。

  5. 删除存储区中的更改:

    git stash drop stash@{n}
    

    这个命令用于删除存储区中的指定存储记录,n 代表存储记录的编号。

  6. 清空存储区:

    git stash clear
    

    这个命令会清空存储区,删除所有的存储记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1150584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外汇天眼:在2023年Expo上探索金融科技的未来!

从2020年初至2022年年底,全球范围内爆发的新冠疫情蔓延,对各国经济造成了严重冲击,导致贸易活动几近停滞,国际人员流动受限,产业链陷入危机。为应对这一局面,美欧经济体采取了前所未有的扩张性财政和货币政…

【已解决】取消 el-aside 默认宽度|不再用 !important

文章目录 问题原因解决方法 问题原因 element-ui 的 el-aside 组件有 width props,默认为 300px 解决方法 给 el-aside 标签添加 width"" width 为空(不正确的css样式/写法)样式将会失效。 就可以在 style 中修改 el-aside 宽…

【小尘送书-第十期】《ChatGPT进阶:提示工程入门》

大家好,我是小尘,欢迎你的关注!大家可以一起交流学习!欢迎大家在CSDN后台私信我!一起讨论学习,讨论如何找到满意的工作! 👨‍💻博主主页:小尘要自信 &#x1…

Windows原生蓝牙编程 第一章 获取本地蓝牙并扫描周围蓝牙信息并输出【C++】

蓝牙系列文章目录 第一章 获取本地蓝牙并扫描周围蓝牙信息并输出 文章目录 前言头文件一、获取本地蓝牙的句柄和信息1.1 wstring转string1.2 获取MAC地址1.3 扫描附近设备并输出1.4 主函数 二、全部代码三、输出结果编译并运行查看结果 MAC地址我就打个码v ![在这里插入图片描述…

拼多多商品数据分析接口|竞品分析接口|支持高并发|拼多多商品价格|拼多多商品优惠券|拼多多已拼人数|API接口申请指南

拼多多提供了一些API接口,可以通过这些接口获取拼多多的商品数据。具体使用方法如下: 获取API接口提供的URL。在API文档中,可以找到获取商品信息的API接口URL。 根据需要获取的信息,选择响应的API。例如,如果想获取商…

AD教程(二)元件库(原理图库)介绍及电阻容模型的创建

AD教程(二)元件库(原理图库)介绍及电阻容模型的创建 元件模型组成 主要由元件边框、管脚(包括管脚序号和管脚名称)、元件名称和元件说明组成,对尺寸大小没有严格要求,注意耦合&…

视频无痕去水印怎么去,这三个神器轻松去除

视频无痕去水印怎么去?各位小伙伴在初学剪视频的时候是不是和我一样经常会碰到一个烦人的问题:在网上找到的视频素材总是带着讨厌的水印,不仅影响美观还挡住了视频的一些部分,让人特别不爽,我想各位遇到这种情况的时候…

vue3中,使用html2canvas截图包含视频、图片、文字的区域

需求:将页面中指定区域进行截图,区域中包含了图片、文字、视频。 第一步,先安装 npm install html2canvas第二步,在页面引入: import html2canvas from html2canvas;第三步,页面使用: 1&…

实现接口自动化测试

最近接到一个接口自动化测试的case,并展开了一些调研工作,最后发现,使用pytest测试框架并以数据驱动的方式执行测试用例,可以很好的实现自动化测试。这种方式最大的优点在于后续进行用例维护的时候对已有的测试脚本影响很小。当然…

2023/10/30 JAVA学习

JAVA浮点型运算会出现精度问题 如果没break,不会立刻停止,会执行下一个语句,并且不会判断条件,执行完后break 也可以这样写定义动态数组 两个变量地址相同,指向了同一个数组对象,所以更改一个另一个也会进行更改 方法其实就是函数 OUT: 外部标签,一种神奇的方式, print是输出括…

软考系统架构师知识点集锦七:计算机系统基础知识

一、考情分析 二、考点精讲 2.1计算机系统概述 2.1.1计算机系统组成 2.1.2 存储系统 时间局部性:指程序中的某条指令一旦执行,不久以后该指令可能再次执行,典型原因是由于程序中存在着大量的循环操作。 空间局部性:指一旦程序访问了某个存储单元,不久…

ICS T8310输入输出模块

输入输入模块(Input/Output Modules,简称I/O模块)是产业自动化和掌握体系中的症结组件,用于衔接传感器、履行器和掌握装备,以兑现数据收罗、监测和掌握。以下是输入输入模块的一些主要特征: 多通道输入和输…

新手如何重装Win10系统?新手一键重装Win10系统教程

新手如何重装Win10系统?新手用户不是很了解专业的系统知识,自己重装系统的难度会比较大,所以特别想知道适合新手的重装方法。接下来小编给大家介绍关于新手用户重装Win10系统的简单步骤教程,帮助更多的新手用户完成Win10系统的重装…

数据结构(三):栈及面试常考的算法

一、栈介绍 1、定义 栈也是一种数据呈线性排列的数据结构,不过在这种结构中,我们只能访问最新添加的数据。从栈顶放入元素的操作叫入栈,取出元素叫出栈。 2、优缺点及使用场景 优点:高效的操作、简单易用、空间效率高等 缺点&…

【C语言实现扫雷小游戏——可展开一片】

文章目录 1. 游戏分析和设计1.1扫雷游戏的功能说明1.2数据结构的分析与设计 2.代码实现2.1基本框架2.2初始化棋盘2.3打印棋盘2.4布置雷2.4统计周围雷的个数2.5排查雷2.6展开一片 3.完成代码3.1game.h3.2 game.c3.3test.c 学习完了函数和数组,让我们做个扫雷小游戏巩…

怎样才能把视频号的视频保存到相册,怎么下载视频号视频两个方法轻松解决

在微信客户端想要下载视频号视频却不知道怎么保存到本地相册?让不少网友犯了难,不用在纠结怎么样才可以将视频号视频下载下来,今天就分享两个小程序将视频号视频提取出来,另外在告诉大家一个下载技巧,一定要看到到结尾…

【Leetcode】 94. 二叉树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:root [1] 输出:[1] 提…

低代码PAAS加速推进企业数字化转型

无论是“十四五”规划从国家层面提出的“加快数字化发展 建设数字中国”,还是后疫情时代企业自身的感受,数字化转型已成为必答题。当前 企业 业务场景化、线上趋势愈加明显,越来越多并发的数字化应用场景,而原有集中式架构扩展能力…

图片去除水印文字怎么去除?这几个方法快来收藏

图片怎么去除水印文字?现在嘛,图片已经成了我们生活和工作里必不可少的一部分,可是有时候看图的时候,总会碰到一些带水印的图片,这些水印总是搞得图片看起来不那么爽,所以很多人都想知道图片怎么去除水印文…