Как я могу откатить репозиторий GitHub для конкретного коммита? - PullRequest
397 голосов
/ 07 декабря 2010

В моем github сейчас 100 коммитов.Мне нужно откатить репозиторий, чтобы зафиксировать 80, и удалить все последующие.

Почему?Предполагается, что это репо для слияния от разных пользователей.Куча слияний произошла как коммит от меня из-за чрезмерного редактирования.Это было связано с неправильной маркировкой моих удаленных веток, где 3 разработчика были помечены как друг друга.Мне нужно сбросить до этой точки, а затем потянуть вперед.

Я хотел сделать ребаз, как в этом примере: Как мне удалить коммит на GitHub?

Тем не менее, git хочет, чтобы я занимался управлением конфликтами.Есть ли более простой способ?

Ответы [ 5 ]

817 голосов
/ 07 декабря 2010
git reset --hard <old-commit-id>
git push -f <remote-name> <branch-name>

Примечание. Как написано в комментариях ниже, Использование этого опасно в среде совместной работы: вы переписываете историю

19 голосов
/ 13 мая 2013

Другой способ:

Извлечь ветку, которую вы хотите отменить, затем сбросить локальную рабочую копию обратно в коммит, который вы хотите, чтобы он был последним на удаленном сервере (все после того, как оно пройдетдо свидания).Для этого в SourceTree я щелкнул правой кнопкой мыши и выбрал «Сбросить BRANCHNAME для этого коммита».

Затем перейдите в локальный каталог вашего репозитория и выполните следующую команду:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v -f -- tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME 

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

18 голосов
/ 14 февраля 2016

Чтобы отменить самый последний коммит, я делаю это:

Во-первых:

git log

получить самый последний идентификатор SHA для отмены.

git revert SHA

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

Это хорошо для немедленного повторения чего-то, что вы только что совершили, что, как мне кажется, чаще всего так.

Как заметил Майк, вы также можете сделать это:

git revert HEAD
2 голосов
/ 12 августа 2018

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

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

git revert -m 1 HEAD

1 голос
/ 15 января 2019

В github самый простой способ - удалить удаленную ветку в пользовательском интерфейсе github на вкладке ветки.Необходимо убедиться в том, что вы удалили следующие параметры, чтобы сделать ветку удаляемой:

  1. Не ветка по умолчанию
  2. Нет открывающих запросов на опрос.
  3. Ветка не защищена.

Теперь воссоздайте его в вашем локальном хранилище, чтобы указать на предыдущую точку фиксации.и добавьте его обратно в удаленное хранилище.

git checkout -b master 734c2b9b   # replace with your commit point

Затем отправьте локальную ветвь в удаленное хранилище

git push -u origin master

Добавьте обратно ветку и защиту по умолчанию и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...