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

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.dtcms.com/a/356401.html

相关文章:

  • 【网络】snat/MASQUERADE作用和应用场景
  • 【混合开发】Android+WebView视频图片播放硬件加速详解
  • 网页提示UI操作-适应提示,警告,信息——仙盟创梦IDE
  • 嵌入式学习 day61 DHT11、I2C
  • 项目一系列-第8章 性能优化Redis基础
  • Python OpenCV图像处理与深度学习
  • 30分钟入门实战速成Cursor IDE(2)
  • 30分钟入门实战速成Cursor IDE(1)
  • 微硕WINSOK高性能NP沟道MOS管WSP4067在Type-C双向快充电源管理系统中的应用
  • Vibe Coding、AI IDE/插件
  • Ansible Playbook 实践
  • 随机森林的 “Bootstrap 采样” 与 “特征随机选择”:如何避免过拟合?(附分类 / 回归任务实战)
  • html入门教程
  • Java使用apache.commons.math3的DBSCAN实现自动聚类
  • 【Docker/Redis】服务端高并发分布式结构演进之路
  • 构建免费的音视频转文字工具:支持多语言的语音识别项目
  • OpenTenBase实战:从MySQL迁移到分布式HTAP的那些坑与收获
  • mysql双机热备(主主模式)
  • 桌面GIS软件添加第三方图层
  • 【web3】十分钟了解web3是什么?
  • Java 将HTML文件、HTML字符串转换为图片
  • 交叉编译 手动安装 libzip 库 移植ARM 需要 zlib的
  • R ggplot2学习Nature子刊一张图,换数据即可用!
  • [机器学习]基于K-means聚类算法的鸢尾花数据及分类
  • 把 AI 塞进「智能跳绳」——基于 MEMS 传感器的零样本卡路里估算器
  • 机器学习回顾——线性回归
  • GitHub 宕机自救指南:打造韧性开发体系
  • 基于站点、模式、遥感多源降水数据融合与评估;Python驱动下,从基础处理、机器学习建模到气候态产品生成的全流程解析
  • Consul 操作命令汇总 - Prometheus服务注册
  • 选华为实验工具:eNSP Pro 和社区在线实验哪个更适合?