Мерзавец: после подготовки реальной фиксации слияния, как создать простую фиксацию?

После вызова git merge --no-commit <commit>, выполнение фиксации приведет к фиксации слияния с два (или больше) родители. Какую команду вызвать для создания простой фиксации вместо этого (не имея необходимость повторно выполнять команду слияния с --squash опция)?

6
задан mklhmnn 14 June 2010 в 15:20
поделиться

2 ответа

Согласно 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'а после успешного коммита.

4
ответ дан 17 December 2019 в 04:41
поделиться

Вы можете попробовать 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

Это создаст сплющенный коммит на целевой ветке, не отмечая никаких отношений слияния.

0
ответ дан 17 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: