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

推荐订阅源

D
DataBreaches.Net
V
Vulnerabilities – Threatpost
C
CERT Recently Published Vulnerability Notes
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
Y
Y Combinator Blog
T
Threatpost
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Project Zero
Project Zero
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
MyScale Blog
MyScale Blog
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
量子位
I
Intezer
Simon Willison's Weblog
Simon Willison's Weblog
C
Cybersecurity and Infrastructure Security Agency CISA
L
Lohrmann on Cybersecurity
L
LINUX DO - 最新话题
The Register - Security
The Register - Security
T
Tailwind CSS Blog
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
T
Troy Hunt's Blog
Stack Overflow Blog
Stack Overflow Blog
Cloudbric
Cloudbric
S
Secure Thoughts
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
L
LangChain Blog
Recorded Future
Recorded Future
小众软件
小众软件
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Tor Project blog
人人都是产品经理
人人都是产品经理
F
Full Disclosure
O
OpenAI News
Webroot Blog
Webroot Blog
A
Arctic Wolf
TaoSecurity Blog
TaoSecurity Blog
P
Privacy & Cybersecurity Law Blog
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
雷峰网
雷峰网
Microsoft Security Blog
Microsoft Security Blog
H
Heimdal Security Blog
B
Blog RSS Feed
Vercel News
Vercel News

吐槽大王部落格

在 X (Twitter) 上找 IT 工作靠谱吗? 我的 2025 我在经营自己的社交帐号,但可能「玩脱了」 我依然没有学会怎么在网上提出技术问题 我是怎么差点被恶意 npm 包攻击的 我对 Vue Router「动态路由」的一点暴论 不用 eas-cli 编译 React Native (Expo) 应用的 Android 版本 【更正版】简单实现类型安全的、能触发 CustomEvent 的 EventTarget 在 IE11 使用 CSS Grid 实现多列卡片列表布局 自建云游戏服务的尝试(2024 更新) 在 Termux 编译和使用 bwm-ng(需要 root) 如何在已有的 Vue CLI 项目使用 esbuild 我的 2021 npm、镜像源与 package-lock.json 新的桌面工作站:HP Z2 G5 Tower 我的 2020 在 Intel 版 MacBook Pro 以 EFI 的形式安装 Windows 10 为什么大家都在安利这一样东西? 新的家庭服务器:MicroServer Gen10 我的 2019 在树莓派(Raspbian)上安装最新稳定版 nginx 驾照 宿舍用小型 UPS 电源与新台灯 拆解我爸 2010 年装的廉价 PC 我的 2018 2018 厦门面基记 我(曾经)设想过的外置智能大脑 没用的无懈可击 tcdw 与 ECMAScript 评论框 如何提出计算机相关问题(更新) 提升古诗词背诵及脸部记忆能力 一袋凉皮引发的『血案』 我写的一言轮播脚本(2018 更新) 土豆评论 我的 2017 我与 Linux 把 WSL 的发行版换成 Debian 时撞的坑 为什么公共 block 列表有时是个很糟的主意 故事:试图不关闭 SIP 在 macOS Sierra 上使用 proxychains-ng Xperia XZ Premium 在 DOSBox 使用 MIDI (MT-32、GM) 音源 昔日的折腾党 Android 手机间的文件传输 胡扯:为什么需要 https 黑历史:在 Flash 里手撕 HTML 与 JSON 从你的 Typecho 博客优雅的导出 Markdown 文件 如何维修电脑 Orange Pi One:百元家庭服务器的软件部分 关于香橙派 Orange Pi One 的碎碎念 在 FC 游戏实现内购 友情链接清理 夏天来了 如何给 tcdw 套上女装 选择 vps-hosting.ca 的廉价 VPS 是个糟糕的主意 Disqus + PJAX 后的小错误修复 域名是建站第一要素 网站搬家喽 重低音 Google Adsense FIR Filter Fader 移植 CMS 程序模板的一般方法 切换到 Ghost 关于以前用的昵称的正式说明 通过甲 JS 加载乙 JS 避免模板烂大街的最佳方法就是自己写一个 强行修改 Android 桌面小部件大小的方法,需 root tcdw 那糟糕的宾馆之旅 用 Flash 实现读取 QQ 空间背景音乐列表 屠城 QZone 播放器 0.1 正式版(求围观)
如何在上游分支被反复重写时优雅地 Rebase
tcdw · 2026-01-02 · via 吐槽大王部落格

最近在处理代码合并时踩了一个大坑,花了 1 小时 20 分钟才解决完冲突。

背景

我的开发分支 feature/my-feature 是基于同事的分支 feature/their-feature 开发的。按计划,同事的分支会先合并进 master。 棘手的地方在于,同事在合并前对他的分支进行了大量的重写操作(Squash、Drop、Reorder),导致 commit hash 全部变了。

如果这时候我硬生生地直接 git rebase 他的新分支,Git 会试图去合并那些其实已经存在但 hash 不同的提交,导致冲突处理起来简直是灾难。

后来我发现,正确的方法是使用 Linux 项目同款的、听起来很古早的方法:手动打 Patch(补丁)。与其在混乱的提交历史中痛苦 Rebase,不如把我的改动剥离出来,再重新打上去。

具体步骤

首先把我的独有改动导出为 patch 文件。假设我基于他之前的版本新增了 18 个 commit:

git format-patch -18 HEAD
# 建议把生成的 .patch 文件移动到一个临时目录,保持清爽

然后,放弃当前混乱的时间线,重置到旧版本,并拉取最新的上游代码:

git reset --hard <某个足够旧的commit>
git fetch
# 这一步把基准切换到同事重写历史后的新分支
git rebase origin/feature/their-feature

接下是最重要的一步,使用 git am 应用补丁,并加上 -3 参数

git am -3 /path/to/0001-foo.patch

-3 参数在这里非常关键。开启这个参数以后,当补丁冲突时,我可以打开 Sublime Merge,看着熟悉的界面从容地解决冲突,而不是对着一堆 .rej 文件发呆。

解决完冲突后直接 git am --continue,检查功能正常,再把第二个、第三个补丁……用同样的方式打上去。

所有补丁打好以后,直接 git push --force-with-lease 就可以了!好耶!