After invoking git merge --no-commit <commit>
, performing a commit will result in a merge commit with two (or more) parents. What command to invoke to create a simple commit instead (without having to re-perform the merge command with the --squash
option)?
views:
49answers:
2You could try a git merge --squash
.
See the question "In git, what is the difference between merge --squash
and rebase
?"
from:
X stable
/
a---b---c---d---e---f---g dev
to:
X-------------------G stable
/
a---b---c---d---e---f---g dev
It will produced a squashed commit on the destination branch, without marking any merge relationship.
According to the git-merge man page, the --squash option does not record $GIT_DIR/MERGE_HEAD. $GIT_DIR/MERGE_HEAD is responsible for creating merge commits; you can see this in the Git sources, file builtin/commit.c:
in_merge = file_exists(git_path("MERGE_HEAD"));
...
if (in_merge) {
... // Perform merge_commit
}
Solution: after having performed a normal merge, simply get rid of $GIT_DIR/MERGE_HEAD to avoid getting a merge commit. You may manually clean up $GIT_DIR/MERGE_MSG and $GIT_DIR/MERGE_MODE as well or leave this task up to Git upon successful commit.