it-roy-ru.com

Как я могу откатить репозиторий GitHub для конкретного коммита?

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

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

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

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

371
Jonathan Vanasco
git reset --hard <old-commit-id>
git Push -f <remote-name> <branch-name>

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

785
jtdubs

По-другому: 

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

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

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

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

19
CommaToast

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

Первый:

git log

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

git revert SHA

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

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

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

git revert HEAD
15
Nick Res

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

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

git revert -m 1 HEAD

2
Richard Nader

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

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

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

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

Затем нажмите местную ветку на удаленный

git Push -u Origin master

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

0
Jianwu Chen