Разрешение конфликтов Git слияния

Репозиторий A Git был клонирован на нескольких компьютерах разработчиков. Некоторые изменения были внесены в код в репозитории. Мы получаем ошибку:

error: Your local changes to the following files would be overwritten by merge:

        public_html/sites/file
        public_html/sites/file1.txt
        public_html/sites/file2.txt
Please, commit your changes or stash them before you can merge.
Aborting

Я прочитал несколько потоков в Интернете, и было предложено несколько разных вариантов. Был выполнен один подход:

 git stash
 git pull
 git stash pop

Думаю, я понимаю основной принцип заклада. Мой вопрос в том, является ли это хорошим решением, и могу ли я столкнуться с любыми проблемами, используя этот подход? У меня есть разумное понимание веб-разработки в целом, но я довольно простой пользователь Git и у меня не было бы большой возможности избавиться от неприятностей на данный момент.

Ответ 1

git stash является совершенно законным, хотя, по словам Грега, по какой-то причине устранение конфликтов может стать странным. Но они по-прежнему фиксируемы, вы ничего на самом деле ничего не пугаете. Команда, которую я знаю для повторного применения stash, git stash apply, хотя pop может быть альтернативой, о которой я не знаю (или она может сделать что-то другое, я не знаю, поэтому вы, вероятно, захотите используйте apply.)

Есть ли причина, по которой вы не хотите совершать эти изменения до слияния? Как правило, это правильная вещь.

Другой вариант:

git stash
git checkout -b newwork
git stash apply
git commit ...

Это создает новую ветку, которая позволит вам обновить ваш мастер без конфликтов, (мастер проверки снова, затем вытащите или выберите + слияние). Затем вы можете объединить свою ветку с (пока все еще на хозяине) git merge newwork. Вы можете разрешать конфликты на главном компьютере, сохраняя при этом работу над новостями без каких-либо конфликтов. Это немного безопаснее, если вы беспокоитесь о конфликтах, которые действительно заворачивают ситуацию, но, как правило, конфликты - это лишь часть процесса, поэтому не беспокойтесь о них слишком много.

Ответ 2

Хорошая практика всегда выполнять любые локальные изменения перед вытягиванием (слиянием) нового кода. Если вы не совершаете, то Git не знает, как вы хотите управлять локальными изменениями. Объединяйте только с чистым рабочим деревом.

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

Ответ 3

У меня есть другое решение:

git reset --hard FETCH_HEAD

Он работает почти в каждом случае.

Ответ 4

Сначала вы должны:

git checkout -- public_html/sites/file
git checkout -- public_html/sites/file1.txt
git checkout -- public_html/sites/file2.txt

Следующий шаг:

git pull origin master