Разрешение конфликтов слияния: принудительная перезапись всех файлов

Я работаю над репозиторием git сам (так что да, я знаю последствия и предупреждения, связанные с этим), и каким-то образом одно из деревьев получило фиксацию после того, как было отправлено, хотя этого не должно было быть.

Теперь я пытаюсь отступить, и он жалуется на сотни конфликтов слияния.

Есть ли способ указать git принудительно перезаписать все файлы локально, поступающие с удаленного сервера? Есть ли способ быстрее, чем делать git reset --hard HEAD~1, а затем тянуть?

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


person Qix - MONICA WAS MISTREATED    schedule 10.01.2013    source источник
comment
почему бы тебе просто не взорвать свою песочницу и снова ее клонировать?   -  person gview    schedule 10.01.2013
comment
Я надеялся на то, что не займет так много времени. Проект большой, и на его клонирование потребуется много времени.   -  person Qix - MONICA WAS MISTREATED    schedule 18.01.2013


Ответы (2)


Есть три простых решения для копирования последней версии, которая находится в вашем удаленном репозитории, с отменой всех изменений, которые вы внесли локально:

  1. Откажитесь от своего репозитория и снова клонируйте. Это наиболее простое решение, но если ваш репозиторий большой, это может занять много времени и может потребовать дополнительных усилий, таких как reconfigureing и т. Д.

  2. Отмените локальные изменения с помощью git reset --hard <hash>, а затем выполните git pull. Проблема в том, что вам нужно сначала найти фиксацию, которая предшествует истории изменений, которых вы пытаетесь избежать. После сброса к этому хешу фиксации выполните git pull.

  3. Выполните git fetch, чтобы обновить вашу локальную ссылку удаленной ветки (обычно origin / master), а затем выполните git reset --hard передачу этой ссылки, т. Е. git reset --hard origin/master.

person William Seiti Mizuta    schedule 10.01.2013
comment
№3 был довольно умен. Хороший ответ. Кстати, добро пожаловать в StackOverflow. Просто примечание: используйте обратные кавычки (`) для обозначения кода или командной строки. - person Qix - MONICA WAS MISTREATED; 10.01.2013
comment
git checkout --theirs ., похоже, работает, если слияние не включает удаления - person Alex R; 23.12.2014
comment
Спустя годы я решил, что № 3 является окончательным правильным ответом. Изучение того, как работают fetch и ссылки, очень важно для эффективного использования Git. - person Qix - MONICA WAS MISTREATED; 24.11.2018
comment
После запуска git fetch origin my_branch и попытки git reset --hard origin/my_branch я получаю следующую ошибку: fatal: ambiguous argument 'origin/my_branch': unknown revision or path not in the working tree. Проблема с битом working tree? - person elPastor; 24.11.2018

git reset --hard {remote_repository_name}/{branch_name}

Пример:

git reset --hard upstream/branch1

Если вы работаете с веткой, вы можете использовать приведенный выше код, но перед этим вы должны установить (восходящий поток или источник) в свой локальный репозиторий,

git remote add upstream https://github.com/lakini/example.git

здесь https://github.com/lakini/example.git - это удаленный исходный репозиторий.

Таким же образом мы можем работать и в удаленном репозитории (origin).

git reset --hard origin/branch1
person Sithara    schedule 04.10.2017