惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Vulnerabilities – Threatpost
S
Secure Thoughts
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threat Research - Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
AWS News Blog
AWS News Blog
C
CERT Recently Published Vulnerability Notes
博客园 - 【当耐特】
量子位
有赞技术团队
有赞技术团队
腾讯CDC
P
Proofpoint News Feed
小众软件
小众软件
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
博客园 - 三生石上(FineUI控件)
L
LINUX DO - 热门话题
人人都是产品经理
人人都是产品经理
罗磊的独立博客
M
MIT News - Artificial intelligence
阮一峰的网络日志
阮一峰的网络日志
爱范儿
爱范儿
A
About on SuperTechFans
月光博客
月光博客
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
P
Palo Alto Networks Blog
K
Kaspersky official blog
Latest news
Latest news
C
Cisco Blogs
I
Intezer
L
Lohrmann on Cybersecurity
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
P
Privacy International News Feed
Scott Helme
Scott Helme
Google DeepMind News
Google DeepMind News
S
Security @ Cisco Blogs
T
The Blog of Author Tim Ferriss
S
Securelist
PCI Perspectives
PCI Perspectives
V
Visual Studio Blog
Simon Willison's Weblog
Simon Willison's Weblog

博客园 - 邗影

关于音频PA结构腔体 球面渲染 关于linux和shi脚本常用的通配符 关于fread读不满一块和读不满count的返回值 UBI的覆盖写和擦除 DTSI 多个模块共用同一个 GPIO 引脚冲突 问题汇总 debug比release程序启动的快 关于CPU占用优先级的调整 关于蜂鸣器发声 麦序与声源定位 关于squashfs压缩挂载 软连接生成 线程退出未定义行为 linux文件查找 C语言弱函数 数据传输报错port unreachable D3D11绘制三角形 关于延迟测试 v4l2检测 关于数据库的性能 流媒体小记包含一些面试问题 v4l2视频采集 流媒体ZLM配置vscode远程开发 关于SPS中的帧率问题 Linux编译问题 SSl冲突问题 D3D初始化窗口显示 关于线程池
如何去掉merge
邗影 · 2026-05-21 · via 博客园 - 邗影

一、本次多余 Merge 的完整产生过程(我的操作全程还原)

1. 前置状态

我本地有自己的代码改动,并且已经本地 commit 提交,此时本地提交历史领先远程分支。

2. 问题操作:直接使用 git pull 更新代码

我准备推送代码前,为了同步远程最新代码,没有使用 rebase,而是直接执行了普通 git pull。

3. 触发分叉产生 Merge

此时远程当前分支有新的更新提交,本地有自己的新提交,本地与远程历史形成两条分叉代码线

普通 git pull 的机制:遇到分叉不会自动叠平代码,而是自动生成一条新的 Merge 合并提交,强行把两边代码合并到一起。

4. 最终结果

分支历史出现分叉、多出一条无用 Merge 记录,分支历史变乱,后续提交流线不纯净,影响合码、回溯、代码规整性。

image

 图片上前两笔是我的,第三笔是L的;

git log --oneline --graph:显示:

*   xxxxxxxx 【合并提交M 我】
|\
| * b7eea90 【 L】
* 585c76f 【 U 我】

先使用reset+push的方法尝试:发现出现了对方提交的代码的丢失;reset一笔,丢失了merge和L的提交,reset 两笔直接我和L的都丢失了;

二、为什么普通方法删不掉 Merge,还会丢代码?(所有翻车原因)-------使用reset+push的方法;

1. 使用 git reset HEAD~1 翻车原因

分支结构:Merge(顶部)包裹两条分叉,一条是远程更新提交,一条是我的本地提交。

HEAD~1 只会退回 Merge 的上一级,也就是停留在「我的旧提交」,直接丢失远程所有更新代码

2. 使用 git reset HEAD~2 翻车原因

一次性回退两步,直接删掉我的提交 + 远程更新提交,所有新增代码全部清空

三、

正确思路:重构线性历史

1. 先回到「远程干净更新节点」(保留远程最新代码)此时有Merge ,L, U;

2.切到了的那笔commit上

3. 再把自己的改动重新叠加在最上方

3. 最终历史变成:远程更新提交个人修改提交

4. 彻底干掉 Merge、无分叉、两边代码全部保留、只改动自己分支

四、标准修复步骤(最终可落地正确流程)

1. 紧急兜底:恢复本地与远程个人分支一致


git checkout    个人分支名
git fetch origin
git reset --hard origin/个人分支名

2. 查看分叉结构,拿到两个关键哈希


git log --oneline --graph

L = 远程更新提交哈希
U = 个人修改提交哈希

*   xxxxxxxx 【合并提交M】
|\
| * b7ee890 【L】
* 585cb6f 【 U】

3. 重置基线到远程更新节点(丢掉Merge,保留远程代码)

在本地切到L的那笔提交上(这个并不是分支的意义,是L开发的时候他自己的分叉)
git reset --hard L

4. 叠加自己的改动(不会空、不会丢)

把我的这笔修改pick到L的分叉上
git cherry-pick U

5. 强推覆盖自己分支(仅改动个人分支)

五、彻底根治:以后再也不产生 Merge

以后本地有代码、需要同步远程更新,禁止直接 git pull

统一使用:

效果:自动线性平铺代码,远程代码在前、我的代码在后,永远不会生成 Merge 提交