Как я могу доверять Git merge?

Я не уверен, что могу доверять Git для автоматического слияния. Вот сценарий.

Создайте программу в главном устройстве:

    MOVE 0 TO I.
A.
    PERFORM X-PROC.
    IF I IS EQUAL TO 25 THEN GO TO A.

Разработчик 1 создает ветку и замечает, что есть ошибка: бесконечный цикл. Он исправляет это:

    MOVE 0 TO I.
A.
    ADD 1 TO I.
    PERFORM X-PROC.
    IF I IS EQUAL TO 25 THEN GO TO A.

Между тем Developer 2 создает ветку и исправляет ошибку по-своему:

    MOVE 0 TO I.
A.
    PERFORM X-PROC.
    ADD 1 TO I.
    IF I IS EQUAL TO 25 THEN GO TO A.

Оба разработчика проверяют свой код и считают его правильным. Оба объединяются с мастером:

    MOVE 0 TO I.
A.
    ADD 1 TO I.
    PERFORM X-PROC.
    ADD 1 TO I.
    IF I IS EQUAL TO 25 THEN GO TO A.

Возвращается бесконечный цикл.

Мне кажется, что эта проблема часто возникает в какой-либо распределенной среде разработки. Когда я тестировал это, Git не сообщал о конфликте слиянием. Иногда эта проблема может оставаться необнаруженной в течение длительного времени. Тест на регрессию должен найти его, но тесты регрессии также объединены в Git, поэтому мы также не можем доверять им.

Что я могу сделать по этому поводу? Нужно ли читать код после каждого слияния?

Ответ 1

Нужно ли читать код после каждого слияния?

Да, конечно.

Автоматические алгоритмы полезны, но они не волшебны; они просто включают изменения, внесенные в обе стороны файла, если они не конфликтуют. Там нет гарантии, что результирующие изменения скомпилируются или даже не бредят. Нет никакой гарантии, что логика не будет полной тренировкой. (Некоторые предположили, что ошибка Heartbleed была результатом того, что автосервер изменил логику тонко и не попал в обзор.)

Это относится к любому инструменту управления версиями, который делает автомир (который, полагая, что вы используете то, что было написано за последние 15 лет или около того, почти наверняка делает.) Хотя это не значит, что импичмент автосериала разрешает два изменения одного и того же файла и, как правило, прекрасная работа; это также относится к слиянию в целом. Если вы изменяете какой-либо файл A и меняете какой-либо файл B, нет гарантии, что слияние имеет смысл.

Лучшая практика: вы всегда должны анализировать свои слияния, прежде чем совершать или нажимать на них, даже когда они автоматически завершатся.