Git не показывает никаких конфликтов и перезаписывает мою локальную копию

Моя рутина на git всегда была очень простой:

git add -A
git commit -m 'the changes I made'
git pull
# resolve conflicts
git push

Однако по некоторым неизвестным причинам, несмотря на множество конфликтов с источником, после извлечения я не получаю никаких конфликтов и без моего разрешения принудительно обновляет мою локальную копию. Что-то вроде этого: "2 файла изменены, 2 вставки (+), 6 удалений (-)". Но в моем случае конфликты не должны решаться простым слиянием и должны требовать ручного разрешения конфликтов с моей стороны. Почему Git не позволяет мне вручную разрешать конфликты? Заранее спасибо! примечание: ни одна из моих команд git не имеет опции Force -f

2 ответа

Решение

git pull без аргументов, более или менее, эквивалентно git fetch && git merge origin/<upstream_branch>, Используя pull вместо fetch а также merge, вы позволяете git попытаться объединиться с вашей локальной веткой. Если это объединение происходит без конфликта, ваш локальный сервер будет выглядеть "принудительно обновленным", потому что он смог разобраться в различиях между версией ваших файлов на удаленном компьютере и вашей собственной без вашего вмешательства.

Отладить то, что происходит, довольно сложно, не видя ваш код, но попробуйте это:

git fetch ;# fetch the remote changes
git diff HEAD origin/<branch> ;# diff your local branch with the remote's copy of <branch>

Выход из git diff должен подсказать вам, что происходит. Если вы хотите следовать этому, попробуйте git merge --no-commit origin/<branch>, тогда выпустите git diff --cached, Это покажет вам, какие именно изменения git объединены автоматически, и позволит вам определить, что к чему.

Если git удается разрешить все конфликты во время git pull тогда он сделает коммит. Это не значит, что все обязательно получилось правильно. Как вы заметили, в зависимости от изменений вам может потребоваться внести некоторые исправления вручную.

Чтобы сделать это, внесите исправления в ваше рабочее дерево после извлечения, затем поставьте их (например, с помощью git add -u) и изменить коммит слияния с git commit --amend,

Это сделает новый коммит слияния, который заменит тот, который сделал git, с вашими исправлениями.

Затем вы можете нажать результаты, как вы это обычно делаете.

Другие вопросы по тегам