调用后git merge --no-commit <commit>
,执行提交将导致与两个(或更多)父级的合并提交。调用什么命令来创建一个简单的提交(无需使用该选项重新执行合并命令--squash
)?
问问题
454 次
3 回答
4
根据git-merge 手册页, --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。
于 2010-06-15T13:35:29.103 回答
1
目录中没有任何骇客的最佳解决方案.git
是使用存储和重置。
>git merge --no-commit $otherbranch
>git stash
>git reset HEAD
>git stash pop
>git commit -a
如果您更频繁地需要,这应该很容易实现自动化。
请注意,乍一看,这似乎在没有 stash 部分的情况下工作,但在添加文件时会失败,因此不能忽略通过 stash 的额外行程。
于 2012-01-13T19:51:34.213 回答
0
你可以尝试一个git merge --squash
.
请参阅问题“在 git 中,和之间有什么区别?merge --squash
rebase
”
从:
X stable
/
a---b---c---d---e---f---g dev
到:
X-------------------G stable
/
a---b---c---d---e---f---g dev
它将在目标分支上生成一个压缩提交,而不标记任何合并关系。
于 2010-06-14T16:34:07.340 回答