Git:准备好真正的合并提交后,如何创建一个简单的提交?

时间:2010-06-14 15:20:57

标签: git git-merge

在调用git merge --no-commit <commit>之后,执行提交将导致与两个(或更多)父项的合并提交。调用什么命令来创建简单提交(无需使用--squash选项重新执行merge命令)?

3 个答案:

答案 0 :(得分:4)

根据git-merge man page,--squash选项不记录 $ GIT_DIR / MERGE_HEAD $ GIT_DIR / MERGE_HEAD 负责创建合并提交;你可以在Git源代码中看到这个,文件 builtin / commit.c

in_merge = file_exists(git_path("MERGE_HEAD"));
...
if (in_merge) {
... // Perform merge_commit
}

解决方案:执行正常合并后,只需摆脱 $ GIT_DIR / MERGE_HEAD 以避免合并提交。您也可以手动清理 $ GIT_DIR / MERGE_MSG 和$ GIT_DIR / MERGE_MODE,或者在成功提交后将此任务保留给Git。

答案 1 :(得分:1)

.git目录中没有任何hackery的最佳解决方案是使用存储和重置。

>git merge --no-commit $otherbranch
>git stash
>git reset HEAD
>git stash pop
>git commit -a

如果你经常需要这个,那么自动化应该是微不足道的。

请注意,这似乎在没有隐藏部分的情况下工作,但在添加文件时失败,因此不能忽略通过存储的额外旅行。

答案 2 :(得分:0)

您可以尝试git merge --squash

请参阅问题“In git, what is the difference between merge --squash and rebase?

从:

      X                   stable
     /                   
a---b---c---d---e---f---g dev

为:

      X-------------------G stable
     /                   
a---b---c---d---e---f---g dev
  

它将在目标分支上产生一个压缩的提交,而不标记任何合并关系。