Подтвердить что ты не робот

Git ветки и фиксирует историю после слияния

Я работаю над проектом (в одиночку), и для каждой разрабатываемой функции я создаю новую ветку, работаю над этой функцией, а затем объединяю ее для освоения. Поэтому обычно я никогда не работаю на двух разных ветвях за один раз и никогда не прикасаюсь к мастеру, работая на ветке.

Когда я объединяю ветвь, я вижу, что (используя gitx и gitk) история мастер-ветки получает все коммиты, которые я сделал для объединенной ветки. Я имею в виду, если у меня есть что-то вроде:

master a-b-c-d
              \z-x-y--
              |branch name

после слияния я получаю:

a-b-c-d-z-x-y
            |branch name

Да, я вижу выделенное имя объединенной ветки (используя gitx и gitk), но ожидаемое - это то, что точно показывает, где совершаются коммиты (к какой ветке):

master a-b-c-d--------M--
              \-z-x-y-/
              |branch name

Итак, я ожидаю увидеть фиксацию "M", которая представляет собой слияние, которое я сделал, чтобы справиться с этим, чтобы не выглядеть так, что все транзакции, которые я сделал с новой ветвью, были сделаны для освоения.

Является ли мое ожидание правильным? Или это нормальное поведение git?

4b9b3361

Ответ 1

Это нормальное поведение Git. Вы выполняете так называемое "быстрое переключение", потому что ваша ветка строго впереди ветки master.

Если вы действительно хотите сохранить историю ветвей (хотя я бы порекомендовал вас не беспокоить), вы можете использовать git merge --no-ff, чтобы заставить его создать комманду слияния, даже если она может выполнить быстрое переадресацию.

Ответ 2

Вы можете найти дополнительную критику опции -no-ff в разделе Понимание Git Workflow", в основном потому, что он сломается git blame.
Подробнее при "ускоренной перемотке вперед при использовании pull и no-ff, когда pull".

Как объясняется в разделе Почему Git использует переключение по умолчанию по умолчанию?, если вы не говорите о действительно долгоживущей ветке, a ускоренное слияние.