Почему не возникает конфликт слияния, когда я пушу на origin, коли перед этим при мерже такой конфликт был?

Когда вы пушите изменения на удаленный репозиторий (origin), Git автоматически проверяет, были ли внесены какие-либо изменения в удаленный репозиторий после того, как вы склонировали его или последнего пулла. Если в удаленном репозитории не было изменений, то Git просто добавляет ваши изменения на верхушку истории коммитов без каких-либо конфликтов.

Однако, если в удаленном репозитории были изменения, ситуация меняется. При попытке пуша локальных изменений на удаленный репозиторий Git выполнит проверку и обнаружит, что есть конфликты между вашими изменениями и изменениями, внесенными в удаленный репозиторий. В этом случае Git не позволит вам выполнить пуш и предложит обновить ваш локальный репозиторий с изменениями из удаленного репозитория.

Теперь давайте разберемся, почему вам не приходится разрешать конфликты на каждом пуше, если вы уже разрешили их при мерже. При мерже Git объединяет изменения из разных веток в новый коммит и компромисом вносит все необходимые изменения. Этот коммит объединения (merge commit) представляет одну версию, подтверждающую слияние изменений из разных веток.

При последующих пушах Git уже видит коммит объединения, который автоматически разрешает конфликты, сделанные в предыдущих мержах. Таким образом, Git понимает, как объединить изменения в следующие пуши, и уже знает, какие строки кода приводят к конфликтам и как их разрешить.

Эта функциональность Git позволяет сохранить целостность истории коммитов и избежать повторного разрешения конфликтов, если изменения были объединены и зафиксированы в коммитах объединения.

Важно отметить, что если в удаленном репозитории были изменения, которые не были объединены в ваш локальный репозиторий (например, если другой пользователь внес изменения непосредственно в ту же ветку, в которой вы работаете), Git все равно выдаст сообщение об ошибке при попытке пуша и потребует сначала обновить ваш локальный репозиторий путем выполнения команды git pull origin branch_name. В этом случае вы должны будете разрешить конфликты перед тем, как Git позволит вам сделать пуш.