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

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

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

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

Ответы [ 21 ]

1111 голосов
/ 16 января 2009

Примечание: см. Альтернативу git rebase -i в комментариях ниже -

git reset --soft HEAD^

Сначала удалите коммит из вашего локального репозитория. Вы можете сделать это, используя git rebase -i. Например, если это ваш последний коммит, вы можете сделать git rebase -i HEAD~2 и удалить вторую строку в появившемся окне редактора.

Затем принудительно нажмите на GitHub, используя git push origin +branchName --force

См. Git Magic Глава 5: Уроки истории - и затем немного для получения дополнительной информации (т. Е. Если вы хотите удалить старые коммиты).

О, и если ваше рабочее дерево грязное, вы должны сначала выполнить git stash, а затем git stash apply.

902 голосов
/ 16 января 2009
git push -f origin HEAD^:master

Это должно "отменить" толчок.

318 голосов
/ 22 апреля 2014

Для легкого возврата, если это просто ошибка (возможно, вы разветвили репо, а затем в итоге нажали на оригинал, а не на новый), есть еще одна возможность:

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

Очевидно, поменяйте это число на номер коммита, к которому вы хотите вернуться.

Все, что с тех пор будет удалено, когда вы нажмете снова. Для этого следующим шагом будет:

git push --force
86 голосов
/ 09 февраля 2016
  1. git log чтобы узнать коммит, который вы хотите вернуть

  2. git push origin +7f6d03:master в то время как 7f6d03 - коммит до ошибочно выдвинутого коммита. + было для force push

И это все.

Здесь - очень хорошее руководство, которое легко и просто решит вашу проблему!

46 голосов
/ 07 июня 2017

Если вы хотите сохранить изменения коммитов после удаления:

Обратите внимание, что это решение работает, если удаляемый коммит является последним зафиксированным.


1 - Скопируйте ссылку фиксации, к которой вы хотите вернуться, из журнала:

git log

2 - Сбросить git со ссылкой на коммит:

 git reset <commit_ref>

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

 git stash

4 - отправить изменения в удаленный репозиторий, (-f или --force):

git push -f

5 - вернуть сохраненные изменения в локальный репозиторий:

git stash apply

7 - Если в изменениях у вас нет отслеженных / новых файлов, вам нужно добавить их в git перед фиксацией:

git add .

6 - Добавьте все необходимые дополнительные изменения, затем зафиксируйте необходимые файлы (или используйте точку '.' Вместо указания каждого имени файла, чтобы зафиксировать все файлы в локальном хранилище:

git commit -m "<new_commit_message>" <file1> <file2> ...

или

git commit -m "<new_commit_message>" .
35 голосов
/ 28 июля 2011

Вам нужно очистить кеш, чтобы он полностью стерся. эта страница помощи от git поможет вам. (это помогло мне) http://help.github.com/remove-sensitive-data/

26 голосов
/ 17 июля 2013

Используйте git revert для возврата толчка.

git-revert - отменить некоторые существующие коммиты

git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>...
git revert --continue
git revert --quit
git revert --abort

Отменить изменения, внесенные соответствующими исправлениями, и записать некоторые новые коммиты, которые их записывают. Это требует, чтобы ваше рабочее дерево было чистым (без изменений из коммита HEAD).

22 голосов
/ 10 августа 2016
1. git reset HEAD^ --hard
2. git push origin -f

Эта работа для меня.

16 голосов
/ 07 марта 2017

Чтобы удалить коммит из удаленного репозитория:

 git push -f origin last_known_good_commit:branch_name

Чтобы удалить коммит из вашего локального репозитория:

git reset --hard HEAD~1

ссылка

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

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

git reset --soft HEAD~1

Удалите самый последний коммит, уничтожив работу, которую вы сделали:

git reset --hard HEAD~1
...