把相同的改动应用到两个不同分支
把相同的改动应用到两个不同分支,有以下几种常用方法:
方法一:先提交,再 cherry-pick(最常用)
在一个分支上提交改动后,用 cherry-pick 把该提交"摘"到另一个分支上。
# 1. 在当前分支提交改动
git add .
git commit -m "feat: 某个功能改动"
# 2. 查看刚才的 commit hash
git log --oneline -1
# 假设输出: abc1234 feat: 某个功能改动
# 3. 切换到目标分支
git checkout branch-b
# 4. 把那个提交摘过来
git cherry-pick abc1234
cherry-pick 会创建一个内容相同但 SHA 不同的新提交,原提交保持不变。
方法二:先新建分支,再 cherry-pick 回来
如果你想让两个新分支都拥有同一份改动:
# 1. 在当前分支提交改动
git add .
git commit -m "feat: 某个功能改动"
git log --oneline -1 # 记下 commit hash,如 abc1234
# 2. 创建第一个新分支(会自动携带当前提交)
git checkout -b branch-a
# 3. 回到原分支,创建第二个新分支
git checkout main
git checkout -b branch-b
# 4. 把提交摘到 branch-b
git cherry-pick abc1234
# 1. 创建第一个分支(自动携带当前提交)
git checkout -b branch-a
# 2. 回到原分支,创建第二个分支
git checkout main
git checkout -b branch-b
# 3. 把提交摘过来
git cherry-pick branch-a
方法三:改动还没提交时,用 stash 中转
如果你的改动还在工作区,尚未 commit:
# 1. 创建第一个分支并提交
git checkout -b branch-a
git add .
git commit -m "feat: 某个功能改动"
# 2. 回到原分支,创建第二个分支
git checkout main
git checkout -b branch-b
# 3. 从 branch-a cherry-pick 过来
git cherry-pick branch-a
方法四:用 patch 文件(适合跨仓库)
# 1. 生成补丁文件
git format-patch -1 HEAD # 导出最近一次提交为 .patch 文件
# 2. 切换到目标分支,应用补丁
git checkout branch-b
git am 0001-xxx.patch
总结对比
| 方法 | 适用场景 | 特点 |
|---|---|---|
| cherry-pick | 改动已提交,复制到另一个分支 | 最常用,简单直接 |
| 新建分支 + cherry-pick | 需要两个新分支都有相同改动 | 一次提交,多处复用 |
| stash 中转 | 改动未提交,需灵活分配 | 适合临时场景 |
| format-patch + am | 跨仓库或需要离线传递 | 生成独立补丁文件 |
大多数情况下,方法一(cherry-pick) 就够了,简洁高效。
不需要相同分支描述的情况
cherry-pick 之后两个分支上的 commit 虽然内容相同,但提交信息、提交时间、commit hash 都是各自独立的,互不影响。
具体操作
创建留存分支,提交改动
git checkout -b backup-current
git add -A
git commit -m "留存:当前改动快照"
回到 main,创建开发分支
git checkout main
git checkout -b feature-next
cherry-pick 过来,同时修改提交信息
git cherry-pick backup-current -m 1 -C backup-current --no-commit
git commit -m "feature-next:基于当前改动继续开发"
或者更简洁的写法,用 --edit 直接在 cherry-pick 时改信息:
git cherry-pick backup-current -e
会弹出编辑器,直接改提交信息即可
最终效果
backup-current: commit abc1234 "留存:当前改动快照"
feature-next: commit def5678 "feature-next:基于当前改动继续开发"
两个分支的 commit hash 不同、提交信息不同,完全独立。之后你在 feature-next 上继续修改、提交,backup-current 始终保持原样不动。
💡 小提示:cherry-pick 本质上是复制提交内容到新分支生成一个全新的 commit,不是引用同一个 commit,所以天然支持各自独立修改信息。

浙公网安备 33010602011771号