详细介绍Git分支合并时如何保留特定分支的修改(策略配置)

雨强姑娘_7500

雨强姑娘_7500

2026-07-11

368人浏览

原创

应禁用自动覆盖,用 git merge --no-commit --no-ff 暂停合并,人工比对 :1(ours)、:2(base)、:3(theirs)版本语义差异,提取公共逻辑、增加条件分支或拆分配置项来安全融合双方修改,而非使用 --ours/--theirs 丢弃意图。

详细介绍git分支合并时如何保留特定分支的修改(策略配置)

git merge 时如何强制保留目标分支(ours)或源分支(theirs)的修改

直接用 --ours 或 --theirs 策略能跳过冲突手动处理,但极易引入静默缺陷——这不是“保留”,而是“丢弃另一方意图”。真正安全的做法是:先禁用自动覆盖,再人工判断语义。

执行合并时加 --no-commit --no-ff,让 Git 暂停在合并提交前:

git merge --no-commit --no-ff feature/login

此时所有文件已应用三方合并结果,但尚未提交。你可以:

  • 用 git status 查看哪些文件被标记为“both modified”
  • 用 git show :2:src/main/java/TokenService.java 查看 base 版本(共同祖先)
  • 用 git show :1:... 和 git show :3:... 分别查看 ours(当前分支)和 theirs(被合并分支)内容
  • 逐行比对逻辑差异,而非只看文本行是否重叠

为什么不能直接用 git merge -s ours/theirs

-s ours 会完全忽略被合并分支的所有变更,包括新增接口、配置项、安全补丁——哪怕只是多加了一行 if (isProd()) { log.warn(...); },也会被无声抹掉。

Permanently Clear Files from Git History
Permanently Clear Files from Git History

帮助用户永久删除 Git 仓库历史中的文件,适用于用户提及 “git filter-repo” 等场景。

下载

-s theirs 同理:当前分支上已上线的风控校验、缓存降级逻辑可能全被覆盖。这两个策略只适合极少数场景:

  • -s ours:用于撤销误合入的实验性分支(如临时调试分支),且确认其无任何有效产出
  • -s theirs:仅限将文档分支(如 docs)合并进主干,且明确接受文档完全替代现有文档
  • 二者都不适用于业务代码、配置、API 定义等含语义的变更

保留双方修改的实操关键点

所谓“保留双方修改”,本质是把冲突从「选 A 或 B」转化为「A + B 如何共存」。常见路径有:

  • 提取公共逻辑:把两分支各自改的 jwtExpiration 计算分别封装为 getLoginTokenTtl() 和 getRefreshTokenTtl(),由调用方按场景选择
  • 增加条件分支:原 if (user.isActive()) 被一方改为 if (user.isActive() || user.isTrial()),另一方插入 && !isRateLimited(),可整合为 if (shouldAllowAccess(user)),把判断逻辑移入独立方法
  • 拆分配置项:application.yml 中同一 key 被设不同值,应拆成 redis.timeout.login 和 redis.timeout.api,避免后续再冲突
  • 拒绝“取平均值”或“拼字符串”式解决:比如把两个 timeout 值硬编码成 3500,或把两段 JSON schema 直接拼接——这会破坏类型契约

容易被忽略的验证环节

很多人解决完冲突就 git add . && git commit,但这时最危险的阶段才开始:

  • 没跑单元测试:尤其是涉及缓存、鉴权、幂等性的逻辑,必须验证双方修改叠加后行为是否符合预期
  • 没查 CI 流水线日志:某些集成测试只在 PR 合并后触发,本地无法复现
  • 没核对 OpenAPI 文档生成结果:两个分支各自扩展了 responses.200.schema,合并后可能因字段名冲突导致 swagger.yaml 校验失败
  • 没确认 Git blame 是否还能追溯到原始提交:如果用了 git checkout --ours 强制覆盖,后续排查问题时会丢失关键上下文

真正的保留,不是让代码通过编译,而是让逻辑意图可追溯、可验证、可演进。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

git git分支 git分支合并

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

2023.07.05

5419

9

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

2023.07.06

1640

6

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

2023.07.24

954

5

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

3537

7

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

3201

6

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

0

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

0

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

0

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

0

26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 7.9万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.8万人学习