如何使用当前 Git index 创建合并提交?
数据小陈
结论
可以先用 git write-tree 将当前 index 写入 tree,再用 git commit-tree 创建一个有两个父提交的合并提交,最后通过 git reset --soft 将当前分支指向该提交。整个过程不需要创建临时提交或标签。
tree=$(git write-tree) &&
merge_commit=$(git commit-tree "$tree" -p HEAD -p other -m "Merge other") &&
git reset --soft "$merge_commit"
这里假设 other 能解析到你希望设为第二父提交的提交。命令会将当前 HEAD 设为第一父提交、other 设为第二父提交,并使用当前 index 中的内容创建提交。
执行前确认
git write-tree 使用当前 index,不会包含工作区里尚未暂存的改动。需要纳入合并提交的文件,请先用 git add 加入 index。如果 index 中还有未解决的冲突条目,写入 tree 会失败,需先解决冲突。
git reset --soft 只移动当前分支引用,不会重置 index 或工作区。新提交的 tree 来自当前 index,因此执行后 index 仍对应这个提交,原有未暂存的工作区改动也会保留。
注意事项
git commit-tree 是底层命令,不会运行普通 git commit 的交互流程或常规提交钩子。执行前请确认当前分支、index 内容以及 other 指向的提交都正确。如果仓库依赖提交钩子或额外的提交策略,请按仓库流程另行处理。
备注:内容仅供参考。
