Конфликты в Git

Ветви являются одной из основополагающих функций любой системы контроля версий, однако, зачастую их чрезмерное использование может быть чревато дополнительными накладными расходами на слияние веток.
В ряде источников упоминалось, что Git разрешает большую часть конфликтов сам, без привлечения пользователя. Я решил проверить на практике, какие именно конфликты, не разрешаемые Subversion, может разрешить Git.
В качестве тестового окружения используем Git-репозиторий на локальной машине. В него поместим два простейших Java-файла.
Создаем ветку experiment и переключаемся на нее

Во всех случаях для слияния веток использовалась команда:

Собственно ниже приведены наиболее типичные конфликты Subversion и как с ними себя повел Git:
Git не разрулил конфликты
  • Вставка строк в одну и туже позицию
  • Перемещение блока текста с изменением и вставка в ветке на его место другого блока
Git разрулил конфликты 
  • Переименование/перемещение файла средствами OS
  • Переименование/перемещение файла через git mv
  • Перемещение блока текста без изменения и вставка в ветке на его место другого блока
  • Изменение пробелов
  • Одинаковые изменения, сделанные в двух ветках
И действительно, Git с задачей обработки конфликтов между ветками справляется намного лучше. Думаю не последнюю роль в этом играет то, что Git не оперирует понятием директории/папки, он анализирует только файлы и пути, а потому количество объектов для конфликтов резко снижается. Не говоря уже об обязательном git stash перед слиянием, что позволяет избежать дополнительных конфликтов и одновременно повышает атомарность комитов.