Когда вы объединяете две ветки вместе, git создает отдельный коммит с сообщением вроде Слить ветку 'master' в мою -отрасль
.Для нетривиального слияния мне ясно, что это полезно: оно хранит историю того, как были слиты, отдельно от любых других изменений. Но когда слияние тривиально (например, когда две ветки не влияют на какие-либо общие файлы), какова цель отдельной фиксации слияния?
Вы можете избежать этой фиксации с помощью git merge --no-commit
. Затем вы можете добавить «реальное» изменение и в этот коммит. Таким образом вы избежите кажущейся бесполезной дополнительной фиксации. Но страница руководства предупреждает об этом:
Вы должны воздерживаться от злоупотребления этой опцией, чтобы внести существенные изменения в коммит слияния. Допустимы небольшие исправления, такие как изменение названия выпуска / версии.
Почему это так?
С коммитами с реальными изменениями, отмеченными как o
, и коммитами только слияния как X
, это разница между этими двумя ситуациями:
o---o-o-o---o--- master
\ \ \ \
o-o-X-o-X-o-X-o--- my-feature
o---o-o-o---o--- master
\ \ \ \
o-o-o---o---o--- my-feature
Почему первая предпочтительнее второй?
PS: Предположим, что my-feature - это общедоступная ветка, которую также используют другие люди, поэтому rebase не будет вариант.