6

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

4

3 回答 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 --squashrebase

从:

      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 回答