Разрешение конфликтов 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