Вопрос

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

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

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

Это было полезно?

Решение

Примечание: пожалуйста, ознакомьтесь с альтернативой git rebase -i в комментариях ниже—

git reset --soft HEAD^

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

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

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

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

Другие советы

git push -f origin HEAD^:master

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

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

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

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

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

git push --force
<Ол> <Литий> <р> git log чтобы найти коммит, который вы хотите отменить

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

И это все.

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

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

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

<Ч>

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>" .

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

Используйте 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).

1. git reset HEAD^ --hard
2. git push origin -f

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

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

 git push -f origin last_known_good_commit:branch_name

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

git reset --hard HEAD~1

ссылка

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

git reset --soft HEAD~1

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

git reset --hard HEAD~1

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

git push origin +[ref]:[branchName]

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

git push origin +7f6d03:master

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

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

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

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

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force

Если вы делаете это, потому что у вас есть конфиденциальные данные в коммите, использование других ответов здесь небезопасно (за исключением 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

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

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

git reset HEAD~n

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

git push -f origin <branch>

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

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

git rebase --preserve-merges -i HEAD^^

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

Вы можете просмотреть свои последние коммиты, затем выбрать хэш коммита, нажав на кнопку "Скопировать полный файл SHA", чтобы отправить его в буфер обмена.

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

Ты должен бежать:

git push origin +g0834hg304gh3084gh:master

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

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

Для GitHub

  • Сбросьте ваши коммиты (ЖЕСТКИЕ) в вашем локальном репозитории
  • Создайте новую ветку
  • Нажмите на новую ветку
  • Удалить СТАРУЮ ветвь (сделайте новую ветвью по умолчанию, если вы удаляете главную ветвь)

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

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

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

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

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

Добавляйте / удаляйте файлы, чтобы все было так, как вы хотите:

git rm classdir
git add sourcedir

Затем измените коммит.

git commit --amend

Предыдущая ошибочная фиксация будет отредактирована, чтобы отразить новое состояние индекса - иными словами, вы никогда не допустили ошибку в первую очередь

Обратите внимание, что делать это следует только в том случае, если вы еще не нажали. Если вы нажали, то вам просто нужно зафиксировать исправление в обычном режиме.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top