Git 小技巧:如何只合并某个分支最近的几个提交,只要最新改动,不要以前的历史
前言在日常开发中我们经常会遇到这种需求当前有一个比较稳定的基础分支(比如dev)另外有一个功能分支(可能只存在于远程)现在想基于基础分支新建一个分支只把功能分支最近的 12 个提交合过来而不想把该功能分支更早的历史内容一并带上如果直接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 个提交推送新分支掌握这个技巧后处理类似「只拿最新改动」的场景会灵活很多。