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

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

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

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

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

2 ответа

Решение

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

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

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

  3. Сделать 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
Другие вопросы по тегам