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, с вашими исправлениями.
Затем вы можете нажать результаты, как вы это обычно делаете.