Git变基冲突解决时,提交信息存储位置及COMMIT_EDITMSG填充问题
Git Rebase冲突解决:提交信息存储位置与COMMIT_EDITMSG预填充问题
冲突解决时当前提交信息存在哪?
在git rebase处理冲突的过程中,当前正在处理的提交的原始信息,会存在仓库根目录下的.git/rebase-merge/message文件里(合并式rebase场景下)。如果是交互式rebase,相关提交信息会和.git/rebase-merge目录下的其他文件配合,但核心的提交信息载体仍是这个message文件。
为什么COMMIT_EDITMSG有时预填充有时不?
.git/COMMIT_EDITMSG是Git临时存储待提交信息的文件,它是否预填充完全取决于冲突解决后的操作:
- 会预填充的情况:解决完冲突后执行
git rebase --continue时,Git会自动读取.git/rebase-merge/message里的原始提交信息,写入COMMIT_EDITMSG并打开编辑器让你确认(除非配置了自动跳过编辑)。另外,手动执行git commit --reuse-message=HEAD这类明确复用提交信息的命令,也会预填充该文件。 - 不会预填充的情况:如果冲突解决后直接执行
git commit而非git rebase --continue,Git会判定你要创建全新提交,不会自动复用之前的提交信息,因此COMMIT_EDITMSG要么为空,要么显示默认提交模板。这种操作会打断rebase流程,属于不符合规范的操作。
内容的提问来源于stack exchange,提问作者Devin Rhode
相关产品推荐
相关产品推荐

