После вызова git merge --no-commit <commit>
, выполнение фиксации приведет к фиксации слияния с два (или больше) родители. Какую команду вызвать для создания простой фиксации вместо этого (не имея необходимость повторно выполнять команду слияния с --squash
опция)?
Согласно git-merge man page, опция --squash не записывает $GIT_DIR/MERGE_HEAD $GIT_DIR/MERGE_HEAD отвечает за создание merge-коммитов; вы можете увидеть это в исходниках Git, файл builtin/commit.c:
in_merge = file_exists(git_path("MERGE_HEAD"));
...
if (in_merge) {
... // Выполните merge_commit
}
Решение: после выполнения обычного слияния просто избавьтесь от $GIT_DIR/MERGE_HEAD, чтобы избежать фиксации слияния. Вы можете вручную очистить $GIT_DIR/MERGE_MSG и $GIT_DIR/MERGE_MODE или оставить эту задачу на усмотрение Git'а после успешного коммита.
Вы можете попробовать git merge --squash
.
См. вопрос "В git, в чём разница между merge --squash
и rebase
?"
from:
X stable
/
a---b---c---d---e---f---g dev
to:
X-------------------G stable
/
a---b---c---d---e---f---g dev
Это создаст сплющенный коммит на целевой ветке, не отмечая никаких отношений слияния.