Как удалить фиксацию на GitHub?

Я "случайно" нажал фиксацию на GitHub.

Можно ли удалить эту фиксацию?

Я хочу вернуть репозиторий GitHub, как и до этого.

Ответ 1

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

git reset --soft HEAD^

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

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

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

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

Ответ 2

git push -f origin HEAD^:master

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

Ответ 3

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

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

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

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

git push --force

Ответ 4

  • git log чтобы узнать коммит, который вы хотите вернуть

  • git push origin +7f6d03:master в то время как 7f6d03 является фиксацией перед ошибочным нажатием фиксации. + был для force push

И что это.

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

Ответ 5

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

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


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

git log

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

 git reset <commit_ref>

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

 git stash

4 - Перенесите изменения в удаленный репозиторий (-f или - -f orce):

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

 git push -f origin last_known_good_commit:branch_name

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

git reset --hard HEAD~1

ссылка

Ответ 10

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

git reset --soft HEAD~1

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

git reset --hard HEAD~1

Ответ 11

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

git push origin +[ref]:[branchName]

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

git push origin +7f6d03:master

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

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

Ответ 12

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

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

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

Ответ 13

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

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

Ответ 14

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

git reset HEAD~n

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

git push -f origin <branch>

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

Ответ 15

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

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

Ответ 16

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

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

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

Вам нужно запустить:

git push origin +g0834hg304gh3084gh:master

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

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

Ответ 17

Для GitHub

  • Сбросить ваши коммиты (HARD) в вашем локальном хранилище
  • Создать новую ветку
  • Нажмите новую ветку
  • Удалить старую ветку (сделать новую ветвь по умолчанию, если вы удаляете основную ветку)

Ответ 18

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

git rebase -i HEAD~4

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

и удалить фиксацию из списка...

сохранить изменения Ctrl + X (ubuntu) или : wq (centos)

Второй метод, верните,

git revert 29f4a2 #your commit ID

это приведет к возврату определенного фиксации

Ответ 19

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

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

Ответ 20

Добавить/удалить файлы, чтобы получить то, что вам нужно:

git rm classdir
git add sourcedir

Затем измените фиксацию:

git commit --amend

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

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

Ответ 21

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

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

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