把相同的改动应用到两个不同分支
把相同的改动应用到两个不同分支,有以下几种常用方法:
方法一:先提交,再 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 时遇到冲突怎么处理吗?

浙公网安备 33010602011771号