Выполнение git reset --hard
(без использования другого аргумента) сбрасывает текущую HEAD обратно в HEAD - так для себя, а также удаляет все незафиксированные изменения в рабочем каталоге. Таким образом, вы получаете чистое состояние для всех файлов, которые Git отслеживает. Это чистое состояние рабочего каталога фактически является требованием выполнить слияние (за исключением некоторых особых случаев). Однако это не мешает вам получить конфликты слияния.
Конфликт слияния происходит, когда объединенные две ветви имеют противоречивый файл Изменения (не состояния), которые Гит не может решить самостоятельно.
В вашем случае ветка, в которую вы сливаетесь, имеет, как вы говорите, существенные изменения в файле. Поскольку вы получаете конфликт слиянием, это означает, что вы также совершили некоторые изменения в том же файле, которые несовместимы. Таким образом, у вас есть локальные изменения в файле.
Вы попытались исправить это, удалив локальный файл. Однако удаление файла : изменение файла: оно удаляет его содержимое. Таким образом, при слиянии возможно, что вы отделили файл, который нужно удалить, что еще раз не выясняет, какова должна быть окончательная версия (если файл будет удален сейчас, если используется версия с объединением, или оба должны быть объединены в каким-то образом?). Таким образом, вы все еще сталкиваетесь с конфликтом слияния, который вам нужно решить.
Если вы не заботитесь о том, что вы сделали в файл локально, можно легко разрешить конфликт слияния, хотя, просто принимая удаленную версию и сохранить его, как это:
- Во-первых, начало слияние с использованием
git pull
. Вы должны получить конфликт слияния в этом файле.
- Как вы не заботитесь о своей местной версии, только проверьте удаленную версию на номер с помощью
git checkout origin/master -- path/to/that/file.xml
(отрегулируйте удаленной ветви и путь к файлу тоже).
- Теперь файл находится в том же состоянии, как в удаленном филиале вы сливаясь в
- Добавить изменения:.
git add path/to/that/file.xml
- При необходимости: решить другие слияния конфликты
- Commit слияния для завершения Это.
И тогда вы окажетесь в состоянии, когда вы успешно объединили ветвь и разрешили конфликт слияния, взяв удаленное состояние этого файла.
Выполнение 'git reset --hard' после вытаскивания без разрешения конфликтов слияния фактически не завершит слияние, но сбрасывается на фиксацию * перед * слиянием, поэтому вы на самом деле ничего не сделали. – poke
Выполняете ли вы 'git reset --hard
'? Если вы это сделаете, то вы _бабите_ слияние – user3159253@poke, я запускаю сброс перед тем, как потянуть, потому что я не хочу иметь дело с конфликтами слияния и знаю, что меня не волнуют незафиксированные изменения. Я знаю, что сброс после вытаскивания и конфликта не будет делать ничего. user3159253, я считаю, что это верно и для вашего объяснения. Посмотрите, не могу ли я обновить вопрос, чтобы это отразить. – user2806590