У новичков, которые работают с Git, часто складывается искаженное представление об этой системе контроля версиями. Одно из таких когнитивных искажений - это то, что для любых действий в Git (или перед любым действием в Git) необходимо в обязательном порядке делать коммит. Так и надежней, и не будет странных, гарантированно возникающих, проблем при объединении кода. Однако, лучше вначале разобраться как действует Git в различных ситуациях, чтобы потом заранее знать его поведение, и использовать это знание в своей работе.
Итак, что произойдет, если сделать команду git pull в рабочей директории в тот момент, когда уже сделаны некоторые изменения, но они еще не закоммичены? Это зависит от того, как пересекаются локальные изменения, и изменения, которые будут получены при git pull. Варианты следующие:
1. Если в локальных изменениях были изменены файлы, не совпадающие с файлами, в которых произошли получаемые по git pull изменения, то в результате работы Git локальные изменения останутся нетронутыми (см. п.2), а файлы, которые не изменялись программистом и для которых были получены изменения, будут изменены.
2. Если в локальных изменениях были изменены файлы, совпадающие с полученными через команду git pull файлами, то Git не будет производить изменения в локальных файлах, и выдаст следующую ошибку:
error: Ваши локальные изменения в указанных файлах будут перезаписаны при слиянии:
simulator/src/main/main_form.cpp
simulator/src/scheme/scheme_view.cpp
Сделайте коммит или спрячьте ваши изменения перед слиянием веток.
Прерываю
Данная ошибка будет выводиться даже в том случае, если изменения внутри файла не пересекаются. То есть, данная ошибка выводится просто по факту того, что локальный файл был изменен, и принятый по git pull файл тоже был изменен.
В этом случае нужно сделать то, что говорит Git.