把相同的改动应用到两个不同分支

把相同的改动应用到两个不同分支,有以下几种常用方法:


方法一:先提交,再 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,所以天然支持各自独立修改信息。

posted @ 2026-08-28 10:07  涣明  阅读(17)  评论(0)    收藏  举报