在调用git merge --no-commit <commit>
之后,执行提交将导致与两个(或更多)父项的合并提交。调用什么命令来创建简单提交(无需使用--squash
选项重新执行merge命令)?
答案 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
它将在目标分支上产生一个压缩的提交,而不标记任何合并关系。