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。

核心流程可以概括为三步:

  1. 基于稳定的基础分支创建新分支
  2. 使用 git cherry-pick 远程分支~N..远程分支 精确抽取最近 N 个提交
  3. 推送新分支

掌握这个技巧后,处理类似「只拿最新改动」的场景会灵活很多。

posted @ 2026-09-23 17:30  牛奔  阅读(6)  评论(0)    收藏  举报