首页 > 其他分享 >情绪稳定!别再让Git合并冲突影响你工作了

情绪稳定!别再让Git合并冲突影响你工作了

时间:2024-10-21 10:12:08浏览次数:8  
标签:Git 更改 情绪稳定 合并 冲突 解决 分支

大家好,我是陈哥,今天想和大家聊聊Git合并冲突解决~

背景

前几天,我正好收到了一位读者的留言:又又又又遇到了Git合并冲突,解决冲突比写代码还费劲,突然想起SVN的好。该怎么避免Git冲突啊?

我想,比如这样?

在我看来,Git合并冲突是不可避免的。在本文,我想和大家简单分享一下遇到Git冲突该如何解决,希望对大家有所帮助。在此之前,我们先来了解一下Git的合并冲突是什么以及合并冲突的类型有哪些。或者如果只对如何解决Git合并冲突感兴趣,也可以滑至第三部分直接阅读。

一、如何识别Git中的合并冲突?

在Git中,我们在两个不同的分支对同一个文件进行更改,特别是在同一文件的同一行尽心更改,会容易产生合并冲突。在这种情况下,Git无法自动解决这些更改之间的不一致性,它会暂停合并过程,并将冲突标记出来,等待我们手动解决。

举一个简单的合并冲突的示例:

  • 在分支main中工作,并修改了mytext.txt文件的第1行,如Hi world。
  • 切换到分支new-feature,然后对mytext.txt的第二行进行修改,如Hello earth。

当我们准备尝试将new-feature分支合并到main分支时,Git无法自动决定在Hi world和Hello earth之间接受哪一个。因此,Git会提醒合并冲突错误,并告诉我们手动解决冲突。

这时,Git会自动用小于号(<)、等号(=)和大于号(>)注释出冲突行,如下所示:

<<<<<<< HEAD(Current Change)
Hi world
=======
Hello earth
>>>>>>> new-feature(Incoming Change)

小于号(<)和等号(=)之间的内容是当前分支(Current Change)中的更改。等号(=)和大于号(>)之间的内容是我们要合并到另一个分支的分支变更。

我们可以自行删除这些注释,再决定如何处理冲突代码行。因此,我们不必将合并冲突看作绊脚石,而可以将其作为需要删除的一些注释以及需要接受或拒绝的内容。

二、Git中合并冲突的类型有那些?

常见的合并冲突有两种类型:内容冲突和结果冲突。

1、内容冲突

我们在两个不同分支上,对同一行代码进行修改,就会发生内容冲突。例如,我们在一个分支的第2行修改了display: flex,又在另一个分支的同一文件的第2行修改了text-align: center。这就是会产生内容冲突,Git会提示我们对代码进行调整。

2、结构合并冲突

结构冲突是指我们在两个不同分支上进行的修改会影响同一个文件。虽然彼此之间不发生逐行冲突,但这些更改会影响文件的结构或组织,如重命名变量、函数、移动代码块等。如果发生结构冲突,Git会提示我们想保留哪些更改。

三、如何解决Git中的合并冲突

既然我们已经了解了Git的合并冲突以及合并冲突的类型,那么我们具体来看看到底该如何解决Git中的合并冲突。

现在许多代码编辑器都能有在本地合并时,解决合并冲突的接口,我将以vscode为例子说明如何解决合并冲突

1、如何在vscode中解决合并冲突

当我们切换到要合并的分支并运行git merge branch-to-merge时,如果存在冲突,系统会提示我们需要解决。vscode中的界面如下所示:

如果我们还没有准备好解决冲突,可以先通过运行git merge --abort来中止合并。如果想要继续解决冲突,我们有三种方式来解决冲突:接受新的更改、接受当前更改或同时接受两个更改。选择三种方式中的任何一种,就能够解决合并冲突。

2、vscode合并编辑器如何解决Git中的合并冲突

运行git merge <branch-to-merge>后,点击“打开合并编辑器”,会出现如下的三个视图:

左侧是新分支的更改,右侧是当前分支的更改,以及两者下方的预览。Incoming是我们想要合并到目标分支的分支中的更改,而current是我们想要合并到的分支中已有的更改。

在合并编辑器中,可使用以下任一方式开始解决冲突:

  • 逐行查看冲突,通过选择复选框来选泽保留左侧还是右侧更改。
  • 选择“接受传入”按钮以接受所有传入的更改,或选择“接受当前”按钮以保留所有存在冲突的更改的当前版本。
  • 在“结果”窗口中手动编辑代码。

解决合并冲突后,单击“接受合并”按钮即可。

四、合并冲突并非全然是坏事

当然,如果团队在为大型代码库创建了PR,并出现合并冲突,那么还有另一种解决方法。我们可以通过运行git pull --rebase upstream main与main重新绑定。这时,我们会看到一个解决冲突的界面以及包含冲突的文件。完成后,运行git add .、git rebase --continue,然后强制推送到分支。

其实,合并冲突并非全然是坏事,这也是一次代码审查的机会。当我们掌握Git合并冲突的处理方法后,会发现团队协作会变得更加顺畅。如果你们还对Git有任何疑问,欢迎参加禅道·中国行(西安站),我们将采用游戏工作坊的形式带大家学习、了解Git。

 

最后,希望我的分享可以帮助到你,也欢迎给我留言与我讨论。

 

标签:Git,更改,情绪稳定,合并,冲突,解决,分支
From: https://www.cnblogs.com/chenqiAaron/p/18488455

相关文章

  • 第5课 GIT版本控制器
    1、版本控制:一种在开发过程用于管理我们对文件,目录或工程等内容的修改历史,方便查看历史记录,备份以恢复以前的版本软件工程技术。2、仓库:受版本控制所有文件修订历史的贡献数据或文件3、工作空间:本地硬盘或linux用户账户上编辑的文件副本4、工作树/工作区:工作区中包括了仓库......
  • Hello, Git
    Git配置查看配置信息gitconfig--list配置用户信息gitconfig--globaluser.name[name_info]gitconfig--globaluser.email[email_info]生成ssh秘钥(可选)ssh-keygen-trsa-C[email_info]Git工作流程克隆仓库如果你要参与一个已有项目,首先需要将远程仓库克隆......
  • git安装使用及连接gitlab集成idea
    一、简介Git是一个开源的分布式版本控制系统,通过git可以对项目进行代码托管,通常配合GitLub、Github使用;想了解更多请进官网(官网下载较慢):https://www.git-scm.com/download/win也可通过关注公众号回复git获取Git-2.46.0-64-bit的安装包二、安装2.1一般公共许可双击下载......
  • 最小体积拉取git仓库并保持可更新
    对于超大型的git仓库不需要提交只是拉取代码进行查看并希望保持代码更新,那么使用depth不仅能得到极小体积的仓库还能大大提速拉取时间拉取最小代码结论:功德+1,来自于掌门的用法,depth设置为300之后,基本上没碰到问题,git新手也可以完整拉取。拉取代码:gitclonehttp://git-inter......
  • git基础
    Git参考地址:https://www.runoob.com/git/git-tutorial.html零、概念介绍​ Git是一个分布式(本地和远程仓库)版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过GIt仓库来存储和管理这些文件,Git仓库分为两种:​ 本地仓库:开发人员自己电脑上的Git仓库​ 远程......
  • github/gitee个人博客到底是什么一个运行原理?
    本文主要讲的是GitHub、Gitee这样的代码存储网站上提供的个人博客建站的原理分析,需要注意的是,本文并不介绍GitHub、Gitee上建立个人blog的操作步骤,本文只介绍原理,不介绍实操步骤。在交代本文主要内容之前需要说明几个概念,那就是动态网站、静态网站的区别,在这两个概念之上我又提......
  • 如何使用github actions 自动部署Hexo博客
    一、创建github仓库创建两个github仓库,一个共有仓库和一个私有仓库。私有仓库用来存储Hexo项目源代码用master分支来存放项目源代码公有仓库用来存储编译之后的静态页面用gh-pages分支来存储静态页面当私有仓库的master分支有内容push进来时,GitHubActions自动编译并且......
  • 安装 Git
    目录git的下载选择Windows开始安装找到下载位置双击Git同意协议选择安装路径剩下的采取傻瓜式安装选择安装的组件开始菜单目录默认编辑器选择初始化新项目的主干名称调整git的环境变量选择SSH可执行文件选择HTTPS后端传输配置行尾转换配置GitBash使用的终端模拟器git......
  • 6-2.Android 对话框之基础对话框问题清单(UI 线程问题、外部取消、冲突问题、dismiss
    对话框对话框(Dialog)是一种常用的UI组件,它主要用于显示信息、接收用户操作反馈对话框可以包含各种元素,但是主要还是以文本、按钮为主,其次是列表其中,基础对话框是Android中最简单的对话框,而后是进度对话框、自定义对话框等一、UI线程问题1、UI线程中创建对话......
  • golang项目引用GitHub私有仓库module
    1.创建gomodule项目module的名字假设为go-testmodule项目创建成功后,将go.mod文件中的module"go-test"修改成module"github.com/tonglin0325/go-test"避免引用的时候goget的时候报错,如下gogetgithub.com/tonglin0325/go-test@latestgo:github.com/tonglin0325......