Я "случайно" нажал фиксацию на GitHub.
Можно ли удалить эту фиксацию?
Я хочу вернуть репозиторий GitHub, как и до этого.
Я "случайно" нажал фиксацию на GitHub.
Можно ли удалить эту фиксацию?
Я хочу вернуть репозиторий GitHub, как и до этого.
Примечание: пожалуйста, смотрите альтернативу
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
.
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 или - -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>" .
Вам нужно будет очистить свой кеш, чтобы полностью стереть его. эта страница справки из 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 и имя ветки, которую вы хотите изменить, например, это мастер и выполните следующие действия:
git push origin +7f6d03:master
Символ "плюс" интерпретируется как --force
, который будет необходим, поскольку вы переписываете историю.
Обратите внимание, что в любое время, когда вы --force
совершите, вы могли бы переписать историю других народов, которые объединили вашу ветку. Однако, если вы быстро поймаете проблему (прежде чем кто-либо еще скроет вашу ветку), у вас не будет проблем.
Вам нужно знать свой хеш фиксации из фиксации, к которой вы хотите вернуться. Вы можете получить его с помощью URL-адреса GitHub, например: https://github.com/your-organization/your-project/commits/master
Скажем, хэш из фиксации (где вы хотите вернуться) - "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 нажмите на свой репозиторий.
git push -f origin <branch>
Надеюсь, это поможет!
Чтобы сохранить структуру ветвления и слияния, важно использовать параметр --preserve-merges
при выполнении rebase:
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)
Второй метод, верните,
git revert 29f4a2 #your commit ID
это приведет к возврату определенного фиксации
Не очень хорошо переписать историю. Если мы используем git revert <commit_id>
, он создает чистую обратную фиксацию указанного идентификатора фиксации.
Таким образом, история не переписана, но все знают, что произошел возврат.
Добавить/удалить файлы, чтобы получить то, что вам нужно:
git rm classdir
git add sourcedir
Затем измените фиксацию:
git commit --amend
Предыдущая ошибочная фиксация будет отредактирована, чтобы отразить новое состояние индекса - другими словами, это будет так, как будто вы никогда не ошиблись в первую очередь
Обратите внимание, что вы должны делать это только в том случае, если вы еще не нажали. Если вы нажали, вам просто нужно зафиксировать исправление нормально.
В GitHub Desktop вы можете просто щелкнуть правой кнопкой мыши на коммите и отменить его, что создаст новый коммит, который отменяет изменения.
Случайное принятие останется в вашей истории (что может быть проблемой, например, если вы случайно зафиксировали ключ или пароль API), но код будет отменен.
Это самый простой и легкий вариант, принятый ответ является более полным.