Как я могу удалить коммит на GitHub? - PullRequest
1561 голосов
/ 16 января 2009

Я "случайно" отправил коммит в GitHub.

Можно ли удалить этот коммит?

Я хочу вернуть свой репозиторий GitHub, каким он был до этой фиксации.

Ответы [ 21 ]

9 голосов
/ 22 июня 2015

Найдите спецификацию коммита, который вы хотите стать руководителем своей ветви на Github, и используйте следующую команду:

git push origin +[ref]:[branchName]

В вашем случае, если вы просто хотите вернуться назад на один коммит, найдите начало ссылки для этого коммита, скажем, например, 7f6d03, и название ветви, которую вы хотите изменить, например, так: мастер и выполните следующие действия:

git push origin +7f6d03:master

Символ плюса интерпретируется как --force, что будет необходимо, поскольку вы переписываете историю.

Обратите внимание, что каждый раз, когда вы --force делаете коммит, вы потенциально можете переписать историю других людей, которые объединяют вашу ветку. Однако, если вы быстро поймете проблему (до того, как кто-то еще объединит вашу ветку), у вас не возникнет никаких проблем.

9 голосов
/ 20 декабря 2016

Вам нужно знать ваш хеш коммита из коммита, к которому вы хотите вернуться. Вы можете получить его с GitHub URL, например: https://github.com/your-organization/your-project/commits/master

Скажем, хеш от коммита (к которому вы хотите вернуться) равен "99fb454" (длинная версия "99fb45413eb9ca4b3063e07b40402b136a8cf264"), тогда все, что вам нужно сделать, это:

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force
6 голосов
/ 02 января 2017

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

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

Во-первых, создайте резервную копию вашего хранилища . Тогда:

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all

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

Если вы уверены, что это правильно, то:

#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all

Вы можете на некоторое время сохранить локальную резервную копию, на всякий случай.

5 голосов
/ 18 января 2017

Запустите эту команду на своем терминале.

git reset HEAD~n

Вы можете удалить последние n коммитов из локального репо, например. ГОЛОВА ~ 2. Продолжайте с помощью git push в вашем хранилище.

git push -f origin <branch>

Надеюсь, это поможет!

3 голосов
/ 21 мая 2014

Для сохранения структуры ветвления и слияния важно использовать опцию --preserve-merges при выполнении ребазирования:

git rebase --preserve-merges -i HEAD^^
2 голосов
/ 08 февраля 2016

Сначала сохраните локальные изменения где-нибудь на стороне (резервная копия)

Вы можете просмотреть свои последние коммиты, а затем выбрать хеш коммитов, нажав на Кнопка «Скопировать полный SHA» для отправки в буфер обмена.

Если ваш последний хеш коммита, скажем, g0834hg304gh3084gh (например)

Вы должны запустить:

git push origin +g0834hg304gh3084gh:master

Использование хэша, который вы скопировали ранее, чтобы сделать его ревизией "HEAD".

Добавьте желаемые локальные изменения. Готово;)

1 голос
/ 20 сентября 2017

для GitHub

  • Сброс ваших коммитов (HARD) в вашем локальном хранилище
  • Создать новую ветку
  • Push new
  • Удалить СТАРУЮ ветку (Создать новую как ветку по умолчанию, если вы удаляете главную ветку)
0 голосов
/ 19 июля 2018

В GitHub Desktop вы можете просто щелкнуть правой кнопкой мыши на коммите и отменить его, что создаст новый коммит, который отменяет изменения.

Случайное принятие останется в вашей истории (что может быть проблемой, если, например, вы случайно передали ключ или пароль API), но код будет отменен.

Это самый простой и легкий вариант, принятый ответ является более полным.

0 голосов
/ 17 июля 2014

Переписывать историю не очень хорошо. Если мы используем git revert <commit_id>, это создает чистую обратную фиксацию указанного идентификатора коммита.

Таким образом, история не переписывается, вместо этого все знают, что произошел возврат.

0 голосов
/ 15 ноября 2017

, если вы хотите удалить сделать интерактивную перебазировку,

git rebase -i HEAD~4

4 represents total number of commits to display count your commit and изменить его соответственно

и удалите коммит из списка ...

сохранить изменения с помощью Ctrl + X (Ubuntu) или : WQ (Centos)

2-й метод, сделать возврат,

git revert 29f4a2 #your commit ID

это вернет определенный коммит

...