Git 小技巧:如何只合并某个分支最近的几个提交,只要最新改动,不要以前的历史
前言
在日常开发中,我们经常会遇到这种需求:
- 当前有一个比较稳定的基础分支(比如
dev) - 另外有一个功能分支(可能只存在于远程)
- 现在想基于基础分支新建一个分支
- 只把功能分支最近的 1~2 个提交合过来,而不想把该功能分支更早的历史内容一并带上
如果直接 merge,会把整个功能分支的历史都合并进来,这通常不是我们想要的结果。更干净的做法是使用 cherry-pick。
一、先确认远程分支是否存在
很多人会直接执行:
git log source-branch -2 --oneline
结果报错:
fatal: ambiguous argument 'source-branch': unknown revision or path not in the working tree.
这通常是因为目标分支只存在于远程,本地还没有对应的引用。先执行:
git fetch origin
git branch -r
确认远程是否存在类似 origin/source-branch 的分支。
二、推荐操作步骤
假设:
- 基础分支:
base-branch - 想抽取提交的分支:
origin/source-branch - 新建分支名:
new-branch
完整命令如下:
# 1. 拉取最新远程信息
git fetch origin
# 2. 切换到基础分支
git checkout base-branch
# 3. 基于基础分支创建新分支
git checkout -b new-branch
# 4. 只把 source-branch 最近的两个提交 cherry-pick 过来
git cherry-pick origin/source-branch~2..origin/source-branch
命令解释
origin/source-branch~2:表示该分支倒数第二个提交(不包含)origin/source-branch:最新提交~2..origin/source-branch:正好覆盖最近两个提交
小提示:如果想先确认具体是哪两个提交,可以执行:
git log origin/source-branch -2 --oneline确认无误后再进行 cherry-pick。
三、遇到冲突时怎么处理
如果 cherry-pick 过程中出现冲突,Git 会暂停操作。解决冲突后执行:
git add .
git cherry-pick --continue
如果想中途放弃本次操作:
git cherry-pick --abort
四、完成后推送到远程
git push -u origin new-branch
总结
当你只想「借用」某个分支最近的几次改动,而不想引入它的完整历史时,优先使用 cherry-pick,而不是 merge。
核心流程可以概括为三步:
- 基于稳定的基础分支创建新分支
- 使用
git cherry-pick 远程分支~N..远程分支精确抽取最近 N 个提交 - 推送新分支
掌握这个技巧后,处理类似「只拿最新改动」的场景会灵活很多。

浙公网安备 33010602011771号