如何以非交互方式合并两个非连续的Git提交?
非交互合并两个非连续提交并复用原始提交信息
有两种非交互的方法可以实现你的需求,具体步骤如下:
方法一:临时分支+Cherry-pick合并提交
这种方法适合快速生成合并后的提交,再整合回原分支:
- 创建临时分支(以原分支
main为例):git checkout -b merge-temp main - 提取第一个提交的修改并自动提交:
git cherry-pick abc123 - 提取第二个提交的修改但不自动提交:
git cherry-pick --no-commit def456 - 提取两个原始提交的完整信息并保存到临时文件:
git log --format=%B abc123 def456 > commit_msg.txt - 用保存的提交信息完成合并提交:
git commit -F commit_msg.txt - 将合并后的提交整合回原分支:
git checkout main git cherry-pick merge-temp - 清理临时分支和临时文件:
git branch -D merge-temp rm commit_msg.txt
方法二:Rebase配合批量Cherry-pick
如果需要保留原分支的其他提交历史,可采用这种方法:
- 假设
def456是更早的提交,基于它的父提交创建临时分支:git checkout -b merge-temp def456~1 - 批量提取两个提交的修改但不自动提交:
git cherry-pick --no-commit def456 abc123 - 提取并保存两个原始提交的信息:
git log --format=%B def456 abc123 > commit_msg.txt - 完成合并提交:
git commit -F commit_msg.txt - 将原分支中
def456之后的提交迁移到合并提交之后:git checkout main git rebase --onto merge-temp def456 - 清理临时分支和临时文件:
git branch -D merge-temp rm commit_msg.txt
注意事项
- 如果两个提交存在冲突,非交互模式下无法自动解决,需要提前手动处理冲突后再继续操作。
--format=%B参数会完整保留原始提交的标题和正文内容,确保提交信息被完整复用。
内容的提问来源于stack exchange,提问作者nabik
相关产品推荐
相关产品推荐

