Тестирование файлов без конфликтов
На предыдущих этапах мы обнаружили и изучили файл с конфликтом слияния (message.txt
). Однако при слиянии веток могут быть файлы, которые были изменены в обеих ветках, но без конфликтов. Git автоматически объединяет такие файлы.
На этом этапе мы создадим новый файл в одной из веток и посмотрим, как Git обрабатывает его в процессе слияния. Это поможет нам понять, что конфликты возникают только при перекрытии изменений в одном и том же файле.
Убедитесь, что вы по-прежнему находитесь в директории ~/project/my-time-machine
и на ветке master
(где произошел конфликт слияния).
Создадим новый файл с именем notes.txt
в ветке master
:
echo "Important notes for the project." > notes.txt
git add notes.txt
git commit -m "Add project notes"
Теперь вернемся в ветку feature/greeting
:
git checkout feature/greeting
В этой ветке файл notes.txt
еще не существует. Создадим здесь другой файл, например, todo.txt
:
echo "Things to do: finish the lab." > todo.txt
git add todo.txt
git commit -m "Add a todo list"
Теперь вернемся в ветку master
и попробуем выполнить слияние снова. Несмотря на то, что мы уже решили конфликт в файле message.txt
, процесс слияния нужно завершить.
git checkout master
git merge feature/greeting
На этот раз, так как мы уже решили конфликт в файле message.txt
и добавили его в staging area (хотя мы явно не показали этот шаг после редактирования, Git часто добавляет файл в staging area после ручного разрешения конфликтов), Git должен успешно завершить слияние. Вы, возможно, увидите вывод, указывающий на то, что слияние завершено.
Проверим статус снова:
git status
Теперь вывод должен показать, что вы находитесь на ветке master
и что рабочее дерево чистое, то есть нет ожидающих изменений или необъединенных путей.
On branch master
nothing to commit, working tree clean
Теперь проверим, присутствуют ли файлы из обеих веток в ветке master
:
ls
Вы должны увидеть файлы message.txt
, notes.txt
(из ветки master
) и todo.txt
(из ветки feature/greeting
).
message.txt notes.txt todo.txt
Это показывает, что Git успешно объединил изменения из ветки feature/greeting
, включая новый файл todo.txt
, без каких-либо конфликтов, так как файл todo.txt
не существовал в ветке master
. Конфликты возникают только когда в одном и том же файле есть перекрывающиеся изменения в ветках, которые сливаются.
Понимание того, как Git обрабатывает как файлы с конфликтом, так и файлы без конфликтов при слиянии, является важной частью эффективного управления историей проекта.