当前位置: 首页 > java >正文

Git 合并冲突

目录

一、合并冲突

二、补充了解git log命令使用

1、基础用法

2、图形化显示分支结构

3、筛选和过滤

4、显示更多信息

5、示例输出解读

6、实用小技巧


一、合并冲突

        在实际进行分支合并时,并非所有合并都能顺利完成,有时会遇到代码冲突的情况。为了演示这一问题,我们可以创建一个名为 dev1 的新分支,并切换到该分支。使用以下命令可以一步完成创建与切换:

git checkout -b dev1

在 dev1 分支中修改 ReadMe 文件,将其中一行的 “aaa” 改为 “bbb”,修改后的内容如下:

随后提交该修改:

切换回 master 分支,查看 ReadMe 文件内容:

        此时文件内容恢复为旧版本,属于正常现象。接下来在 master 分支中再次修改 ReadMe 文件,将 “aaa” 改为 “ccc”:

提交该修改:

现在,master 分支和 dev1 分支各自都有新的提交,如下:

当我们尝试将 dev1 合并到 master 时,Git 无法自动合并两者的修改,从而产生冲突:

使用 git status 可查看冲突状态:

Git 使用特殊符号标记出冲突内容:

  • <<<<<<< HEAD 表示当前分支(master)的内容

  • ======= 作为分隔符

  • >>>>>>> dev1 表示要合并的分支(dev1)的内容

查看 ReadMe 文件可见如下冲突标记:

此时需手动调整冲突部分,例如选择保留某一方的修改或进行整合。修改后文件内容如下:

完成修改后,必须重新添加文件并提交以完成合并:

到这里冲突就解决完成,此时的状态变成了:

此时冲突已解决。可通过以下命令查看带合并历史的分支图(通过带参数的git log命令查看分支合并情况):

git log --graph --pretty=oneline --abbrev-commit

命令分解说明

  • --graph

    • 作用:在输出左侧绘制一个基于文本的分支合并图

    • 为什么重要:这是理解分支结构的关键。它能清晰显示出哪些提交是在同一个分支上发展的,哪里发生了分支,以及哪里又合并回了主线。没有这个选项,你只能看到一条线性的提交列表,无法感知分支的存在。

  • --pretty=oneline

    • 作用:指定输出的格式为“单行”模式。

    • 默认 git log 输出:每个提交会显示完整哈希值、作者、日期和提交信息,占用多行,信息量大但不够紧凑。

    • oneline 模式:每个提交只显示为一行,包含缩短的提交哈希和提交信息摘要,非常简洁,适合快速浏览历史。

  • --abbrev-commit

    • 作用:仅显示提交哈希值的前7个字符,而不是完整的40位长哈希串。

    • 为什么好用:7位缩写哈希在大多数情况下足以唯一标识一个提交,并且让输出更加易读。它通常与 --pretty=oneline 一起使用,因为 oneline 模式默认就会使用缩写哈希。

最后,若不再需要 dev1 分支,可将其删除:


二、补充了解git log命令使用

git log 是 Git 中查看提交历史的最重要命令,默认会按时间倒序列出所有提交。

1、基础用法

# 最基本用法,显示详细的提交历史
git log

# 显示简洁版本,只包含提交哈希和说明
git log --oneline

# 显示最近 n 条提交
git log -n 3        # 显示最近3条

2、图形化显示分支结构

这是理解分支合并非常实用的功能:

# 以文本图形显示分支和合并历史(最常用)
git log --graph --oneline

# 显示更详细的图形化历史
git log --graph --pretty=format:'%h - %s (%cr) <%an>'

3、筛选和过滤

# 查看某个文件的修改历史
git log <文件名># 查看包含特定关键词的提交
git log --grep="关键词"# 查看某位作者的提交
git log --author="作者名"# 按时间筛选
git log --since="2024-01-01" --until="2024-12-31"

4、显示更多信息

# 显示每次提交的具体变更内容
git log -p

# 显示简略的统计信息(修改了多少文件,多少行)
git log --stat

# 显示所有分支的历史
git log --all

5、示例输出解读

以上面中的例子:

  • * 表示一次提交

  • | 和 / 表示分支线

  • |\ 表示合并点(有两个父提交)

  • HEAD -> master 表示当前所在位置

  • (dev1) 表示该提交在 dev1 分支上

6、实用小技巧

# 将日志输出为漂亮格式(常用别名配置)
git log --graph --oneline --decorate --all

# 查看某次提交的详细信息
git show <提交哈希>

记住:git log 有非常多的参数选项,不需要全部记住,掌握几个常用的组合即可满足日常开发需求。

http://www.xdnf.cn/news/19137.html

相关文章:

  • C++ 编译和运行 LibCurl 动态库和静态库
  • 32.String str=aaa与 String str=new String(aaa)一样吗?new String(“aaa”);创建了几个字符串对象
  • Linux按键驱动开发
  • 明远智睿 RK3568 核心板:以硬核性能解锁多领域应用新可能
  • 手写一个Spring框架
  • 【活动回顾】“智驱未来,智领安全” AI+汽车质量与安全论坛
  • Labview邪修01:贪吃蛇
  • 数据结构:归并排序 (Iterative Merge Sort)
  • 非支配排序遗传算法进化多目标优化算法
  • 【混合开发】Android+webview模拟crash崩溃补充说明
  • 【LeetCode每日一题】141. 环形链表 142.环形链表 II
  • Rspack
  • Kafka入门指南:从安装到集群部署
  • Mock 在 API 研发中的痛点、价值与进化及Apipost解决方案最佳实践
  • 【Docker/Redis】服务端高并发分布式结构演进之路
  • RS485、RS232、RS422协议
  • 若依微服务一键部署(RuoYi-Cloud):Nacos/Redis/MySQL + Gateway + Robot 接入(踩坑与修复全记录)
  • 云手机的安全性如何?
  • LeetCode Hot 100 第8天
  • 群组分析 (Cohort Analysis)——哪批用户最优质?
  • 【Spring底层分析】Spring AOP补充以及@Transactional注解的底层原理分析
  • 12大主流本地文档管理系统功能与价格对比分析
  • 如何设置阿里云轻量应用服务器镜像?
  • v-model与v-bind区别
  • LG P5386 [Cnoi2019] 数字游戏 Solution
  • CesiumJS 介绍以及基础使用
  • 【完整源码+数据集+部署教程】硬币分类与识别系统源码和数据集:改进yolo11-SWC
  • GoogLeNet:深度学习中的“卷积网络变形金刚“
  • 从“安全诉讼”说起:奖励模型(Reward Model)是LLM对齐的总阀门(全视角分析)
  • 如何在实际应用中选择Blaze或Apache Gluten?