Я "случайно" нажал фиксацию на GitHub.
Можно ли удалить эту фиксацию?
Я хочу вернуть репозиторий GitHub, как и до этого.
Примечание: см. альтернативу
git rebase -i
в комментариях ниже -
git reset --soft HEAD^
Сначала удалите фиксацию в локальном репозитории. Вы можете сделать это, используя git rebase -i
. Например, если это ваша последняя фиксация, вы можете сделать git rebase -i HEAD~2
и удалить вторую строку в появившемся окне редактора.
Затем, принудительно нажмите на GitHub, используя git push origin +branchName
Подробнее см. Git Волшебная глава 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
И что это.
Здесь - очень хорошее руководство, которое решает вашу проблему, легко и просто!
Вам нужно будет очистить свой кеш, чтобы полностью стереть его. эта страница справки из 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
Эта работа для меня.
1 - Скопируйте ссылку на фиксацию, которую хотите вернуться в журнал:
git log
2 - Reset 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 push -f origin last_known_good_commit:branch_name
Чтобы удалить фиксацию из вашего локального репозитория:
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
Возможно, вы захотите временно сохранить локальную резервную копию на всякий случай.
Чтобы сохранить структуру ветвления и слияния, важно использовать параметр --preserve-merges
при выполнении rebase:
git rebase --preserve-merges -i HEAD^^
--preserve-merges
--interactive
и --interactive
вместе. Смотрите раздел ошибок на ребаз
Сохраните локальные изменения сначала где-нибудь сбоку (резервное копирование)
Вы можете просмотреть последние коммиты, а затем выбрать хеш фиксации, нажав на "Скопировать полный SHA", чтобы отправить его в буфер обмена.
Если ваш последний хэш-код фиксации, скажем, g0834hg304gh3084gh (например)
Вам нужно запустить:
git push origin +g0834hg304gh3084gh:master
Использование хеша, который вы скопировали ранее, чтобы сделать его ревизией "HEAD".
Добавьте необходимые локальные изменения. Готово;)
Запустите эту команду на своем терминале.
git reset HEAD~n
Вы можете удалить последние n коммитов из локального репо, например. ГОЛОВА ~ 2. Продолжайте с помощью силы git нажмите на свой репозиторий.
git push -f origin <branch>
Надеюсь, это поможет!
Удалите последнюю фиксацию, сохраняя выполненную вами работу:
git reset --soft HEAD~1
Удалите последнее коммит, уничтожив выполненную работу:
git reset --hard HEAD~1
если вы хотите удалить интерактивную перезагрузку,
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
это приведет к возврату определенного фиксации
Для GitHub - Reset ваши коммиты (HARD) в вашем локальном репо и создайте новую ветку. Нажмите новый. Удалить ветку OLD. (Создайте новый как ветвь по умолчанию, если вы удаляете ветвь мастера)
Добавить/удалить файлы, чтобы получить то, что вам нужно:
git rm classdir
git add sourcedir
Затем измените фиксацию:
git commit --amend
Предыдущая ошибочная фиксация будет отредактирована, чтобы отразить новое состояние индекса - другими словами, это будет так, как будто вы никогда не ошиблись в первую очередь
Обратите внимание, что вы должны делать это только в том случае, если вы еще не нажали. Если вы нажали, вам просто нужно зафиксировать исправление нормально.
Не очень хорошо переписать историю. Если мы используем git revert <commit_id>
, он создает чистую обратную фиксацию указанного идентификатора фиксации.
Таким образом, история не переписана, но все знают, что произошел возврат.
git revert
.