Разрешить конфликты слияния: принудительно перезаписать все файлы
Я работаю над git-репозиторием самостоятельно (так что да, я знаю последствия и предупреждения, связанные с этим), и каким-то образом одно из деревьев получило коммит после того, как оно было выдвинуто, когда этого не должно было быть.
Сейчас я пытаюсь отступить, и он жалуется на сотни конфликтов слияния.
Есть ли способ сказать git принудительно перезаписывать все локальные файлы, которые приходят с удаленного сервера? Есть ли более быстрый способ, чем делать git reset --hard HEAD~1
а потом делать тягу?
На этой же ноте, есть ли способ сделать то же самое с помощью простого слияния? Все, что я видел, предлагает проверить каждый файл на этапе разрешения конфликта слияния, но с сотнями файлов это просто невозможно сделать вручную.
2 ответа
Существует три простых решения для копирования последней версии, которая находится в вашем удаленном репозитории, отбрасывая все изменения, которые вы внесли локально:
Откажитесь от своего хранилища и снова клонируйте. Это самое простое решение, но если ваш репозиторий большой, это может занять много времени и может потребовать дополнительных усилий, таких как
configure
и т. д.Отменить локальные изменения с
git reset --hard <hash>
а затем сделатьgit pull
, Проблема в том, что вам нужно сначала найти коммит, который предшествует любой истории изменений, которую вы пытаетесь избежать. После сброса в этот хеш коммита сделайтеgit pull
,Сделать
git fetch
принести обновления к вашей локальной ссылке на удаленную ветку (обычно origin/master), а затем сделатьgit reset --hard
передавая эту ссылку, т.е.git reset --hard origin/master
,
git reset --hard {remote_repository_name}/{branch_name}
Пример:
git reset --hard upstream/branch1
Если вы работаете с веткой, вы можете использовать приведенный выше код. Но перед этим вы должны установить (upstream или origin) в свой локальный репозиторий,
git remote add upstream https://github.com/lakini/example.git
здесь https://github.com/lakini/example.git - это удаленный вышестоящий репозиторий.
Так же, как и это, мы можем работать и в удаленном репозитории (origin).
git reset --hard origin/branch1