Обязательно ли две ветви идентичны, если как перебазирование, так и слияние являются взаимно «актуальными»?

#git #git-merge #rebase #git-merge-conflict

Вопрос:

Когда git сообщает о двух ветвях как о взаимно «обновленных» как для перебазирования, так и для слияния, означает ли это, что их содержимое должно быть идентичным?

Кроме того, я думаю, что обратное, возможно, не повлечет за собой, поскольку ветви с одинаковым содержанием могут иметь несвязанные истории, которые нельзя объединить? Или вместо этого имеет место тот факт, что сам факт наличия идентичного контента автоматически заменяет любое рассмотрение истории (непересекающейся или иной), что означает, что идентичным ветвям по своей сути всегда разрешается взаимное слияние/перебазирование без конфликта?

Ответ №1:

Ветвь-это имя одной фиксации. Другие коммиты могут быть родителем этого коммита или родителем этого родителя и так далее. Эти предковые коммиты образуют совокупность коммитов, доступных из коммита с именем ветви.

Способ, которым Git сравнивает ветвь с другой, заключается в том, чтобы увидеть, приводит ли какая-либо из них к достижимым коммитам, к которым другая не приводит. «В актуальном состоянии» (ни впереди, ни позади, ни и то, и другое) означает, что ответ отрицательный. Поэтому ветви идентичны для целей того, что вы пытаетесь сделать.

Например, предположим, вы пытаетесь объединить A в B, и Git говорит: «Нет, это актуально». Это означает, что все коммиты, доступные из A, уже доступны из B, так что делать нечего.