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
有非常多的参数选项,不需要全部记住,掌握几个常用的组合即可满足日常开发需求。