git 合并分支

在 Git 中合并分支是日常开发中最常见的操作之一。以下是详细的步骤、冲突处理以及常用技巧的指南:

一、 基本合并步骤

假设你要将 feature 分支的代码合并到 main(或 master)分支。

1. 切换到目标分支 首先,确保你当前在你要合并进去 的目标分支上(例如 main)。

复制代码
复制代码
git checkout main
# 或者使用较新的命令
git switch main

2. 确保目标分支是最新的(推荐) 在合并前,最好先拉取远程目标分支的最新代码,避免与远程代码产生冲突。

复制代码
复制代码
git pull origin main

3. 执行合并 将 feature 分支合并到当前的 main 分支。

复制代码
复制代码
git merge feature

二、 处理合并冲突 (Merge Conflicts)

如果 main 和 feature 分支修改了同一个文件的同一部分,Git 无法自动决定保留哪个,就会产生冲突。

1. 查看冲突 Git 会在终端提示哪些文件有冲突(标红)。你也可以使用以下命令查看:

复制代码
复制代码
git status

2. 解决冲突 打开有冲突的文件,你会看到类似以下的标记:

复制代码
复制代码
<<<<<<< HEAD
这是 main 分支的代码
=======
这是 feature 分支的代码
>>>>>>> feature

你需要手动编辑文件,删除这些标记(<<<<<<<, =======, >>>>>>>),并修改、保留你最终想要的代码。

3. 标记冲突已解决并提交 修改完所有冲突文件并保存后,将它们添加到暂存区,然后完成合并提交:

复制代码
复制代码
git add .
git commit 

(注意:解决冲突后的 commit 通常不需要加 -m,Git 会自动打开编辑器生成默认的合并信息,直接保存关闭即可。)


三、 常用的合并选项 (进阶)

根据不同的需求,你可以使用不同的参数来控制合并行为:

1. 保留分支历史 (--no-ff)

默认情况下,如果 main 分支在分叉后没有新的提交,Git 会执行 "Fast-forward"(快进)合并。这会导致 feature 分支的提交历史直接混入 main,在历史线上看不出曾经有过一个分支。 使用 --no-ff 会强制创建一个合并提交 (Merge Commit),保留清晰的分支拓扑结构。

复制代码
复制代码
git merge --no-ff feature -m "Merge feature branch into main"
2. 压缩提交 (--squash)

如果 feature 分支有很多细碎的提交(如 "fix typo", "update"),你想把它们压缩成一个提交 再合并到 main,可以使用 --squash。

复制代码
复制代码
git merge --squash feature

注意:执行后,代码会合并到暂存区,但*不会自动提交 。你需要手动执行 git commit -m "你的提交信息"。*

3. 放弃合并 (--abort)

如果你在合并过程中发现冲突太多,或者改主意了,想要撤销这次合并操作,恢复到合并前的干净状态:

复制代码
复制代码
git merge --abort

(注意:这只有在合并发生冲突、尚未完成最终 commit 时才有效。)


四、 合并前的最佳实践与注意事项

  1. 保持工作区干净 :在切换分支和合并前,确保当前分支的修改已经提交(commit)或暂存(stash),避免代码丢失或带入其他分支。

    复制代码
    复制代码
    git stash       # 临时保存未提交的修改
    # ... 执行合并操作 ...
    git stash pop   # 恢复修改
  2. 先 Rebase 再 Merge(团队常用) :很多团队喜欢先在 feature 分支上执行 git rebase main,把 feature 的基底变基到 main 的最新节点,让提交历史变成一条直线;然后再切换回 main 执行 git merge feature,这样 Git 历史记录会非常干净清晰。

如果你在合并时遇到了具体的报错信息,或者想了解某种特定的合并场景(如 cherry-pick、rebase),可以随时告诉我!

相关推荐
Elasticsearch7 分钟前
更少的位数,相同的召回率:DiskBBQ 更保守的自动校准扫描
elasticsearch
Flynn Liang1 小时前
Apache Superset 重要特性详解(三):语义层 / 权限 / 缓存 / 嵌入的实战最佳实践(2026 版)
大数据·clickhouse·数据可视化·架构设计·superset·数据分析平台
小田学Python13 小时前
工具调用:让 Agent 从“说”到“做”
大数据·大模型·agent·ai工具·deepseek
GrowingIO技术社区17 小时前
用户行为分析怎么做?从业务目标到改进验证的完整流程
大数据·数据挖掘·数据分析
瑞克-桑切斯20 小时前
docker Harbor 单机部署手册
大数据·运维·elasticsearch·docker·容器
演艺大赏1 天前
NiFi 起不来、登不上、节点被挤掉:一份按日志定位的排错清单
大数据
freejackman1 天前
【实战三】撕开脱敏盲区:深度解析 CASE WHEN 与窗口函数血缘
大数据·数据库·sql
wafrdggh1 天前
2026电商快递批量查询怎么用?固乔助手模板设置评测
大数据·数据库·小程序
大大大大晴天1 天前
OLTP、OLAP、数据湖、数据集市、湖仓一体到底是什么关系?
大数据
正在走向自律2 天前
AI Agent 落地这一年:从“能跑起来”到“敢放出去”
大数据·人工智能·ai agent·智能体·mcp·a2a