Azure Devops Git Squash-Commit Проблема поддельных коммитов

моя компания в настоящее время работает над Azure Cloud, управляя нашими репозиториями кода с помощью Azure Devops и Git.

В течение нескольких месяцев мы решили использовать Squash-коммит, когда хотели объединить наши ветки функций с нашей веткой разработки с помощью запросов на извлечение.

С тех пор у нас возникают большие проблемы с объединением файлов, так как в разделах File-Updates мы видим тысячи обновлений файлов. Большинство из них уже были зафиксированы в нашей ветке разработки, поэтому они фальшивые и вызывают много опасений по поводу возможных последствий их повторной фиксации.

Почему git распознает эти файлы как измененные (новые)? Есть ли что-то, что нам не хватает? или неправильно делаешь?

С Уважением


person Alessio Orlando    schedule 24.05.2021    source источник
comment
Отвечает ли это на ваш вопрос? Конфликты слияния Git во время PR   -  person matt    schedule 25.05.2021
comment
Есть ли что-то, что нам не хватает? или неправильно делаешь? Очевидно да. Сквош-слияние — это не слияние! Таким образом, база слияния никогда не перемещается, PR становятся все длиннее и длиннее, и конфликты могут легко возникать, и они становятся все хуже и хуже. Вы выбрали неправильную стратегию.   -  person matt    schedule 25.05.2021


Ответы (1)


При сравнении файлов PR он не только сравнивает изменения файлов между исходной ветвью и целевой ветвью. Он сравнит историю коммитов между ними.

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

Это означает, что когда вы используете слияние сквоша для слияния PR, только изменения файла в исходной ветке (feature в вашем случае) будут объединены и сгенерированы новые фиксации в целевой ветке ( develop в вашем случае). История коммитов для этих изменений файла в исходной ветке не будет объединена с целевой веткой.

Как правило, при завершении слияния сквоша вы должны удалить исходную ветку. И в следующий раз, если вы все еще хотите использовать слияние сквоша, вы можете создать новую исходную ветку (вы все еще можете использовать то же имя ветки feature) на основе целевой ветки. Затем внесите изменения в новую исходную ветку, слейте изменения в целевую ветку с помощью слияния, удалите исходную ветку.

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

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

Дополнительные сведения см. на странице Создание пулл-реквестов на слияние.

введите здесь описание изображения

person Bright Ran-MSFT    schedule 25.05.2021