如何实现类似git --amend的功能修改非最新Git提交?
非交互式Git脚本需求:修改指定提交的父节点
背景与现有逻辑
我的项目包含多个交替使用的文件,脚本会在每次文件保存时自动提交,每次提交仅包含单个文件的变更:
- 若最新提交(
HEAD)的变更属于当前保存的文件,则自动执行git commit --amend; - 若
HEAD的变更属于其他文件,则直接提交,不使用--amend参数。
当交替使用并保存不同文件时,当前文件的最后一次提交可能不再是HEAD,而是更早的提交(比如HEAD~1),此时git commit --amend无法生效。我需要扩展脚本,实现类似--amend的功能,能够修改非HEAD的历史提交。
场景示例
当前可用git commit --amend的场景
master ↓ 1 --- 2 --- A
执行$ git commit --amend后,生成新提交B:
master ↓ 1 --- 2 --- A B \_________/
需要解决的目标场景
当前提交链:
master ↓ 1 --- A --- 2
期望实现的效果(将提交2的变更合并到提交A的位置,生成新提交B,让master指向B):
master ↓ 1 --- A 2 --- B \_________/
遇到的问题
尝试使用git rebase --onto 1 A会产生不必要的合并冲突,而脚本是非交互式的,必须避免冲突才能稳定运行。
简化后的核心问题
如何将提交2的父提交从A改为1?当前提交2的内容如下:
$ git cat-file -p 2 tree 228f55 parent A
内容的提问来源于stack exchange,提问作者Herman
相关产品推荐
相关产品推荐

