Git дублирует код

Мы только что переключились с Subversion на Git.

Проблема, которая возникла этим утром, заключалась в том, что мы выбрали коммит из ветви в master, чтобы maser мог исправить ошибку. Затем мы слили мастера обратно в ветку.

Когда мы попытались скомпилировать, все дополнения из вишневого коммита были в коде дважды.

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

Там никогда не было конфликта.

Как нам этого избежать. Это большая проблема.

Благодарю.

1 ответ

Решение

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

То есть вы создаете коммит с помощью хэша ABC, Вы выбираете его, создавая новый коммит DEF, Слияние тогда применяется DEF рядом ABC,

Выше я бы, вероятно, ожидал, что вы просто выполните коммит на мастер (скажем) и выберите его в своей ветке.

Этот блог имеет больше информации.

Обратите внимание, что он создает новый коммит в основной ветке. Если на master вы запустите "git log", вы увидите другой хеш для того же сообщения коммита. Зачем?

Это из-за того, как Git моделирует коммит. Коммит - это полный снимок всего репозитория, а хэш для данного коммита отражает состояние каждого файла во всем каталоге - это хэш всех их хэшей.

Совершенно очевидно, что поскольку в основной ветви нет всех коммитов из ветви функций, полный ее снимок во время применения исправления сгенерирует хеш, отличный от полного снимка ветви функции во время исправления ошибки. применяется там. Таким образом, разные хеши.

Но когда вы объединяете ветвь функций с master, это не имеет значения; Хеши для отдельного файла, в котором вы сделали исправление, будут одинаковыми, потому что их содержимое будет одинаковым, поэтому обновлять на мастере для этого файла нечего.

Этот блог подробно описывает похожую ситуацию и способы ее использования. git rebase чтобы избежать таких проблем.

Другие вопросы по тегам