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

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

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

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

+1567
15 янв. '09 в 23:20
источник поделиться
21 ответ

Примечание: пожалуйста, смотрите альтернативу 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.

+1115
15 янв. '09 в 23:24
источник
git push -f origin HEAD^:master

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

+905
16 янв. '09 в 0:11
источник

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

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

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

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

git push --force
+319
21 апр. '14 в 20:26
источник
  • git log чтобы узнать коммит, который вы хотите вернуть

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

И что это.

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

+86
09 февр. '16 в 11:58
источник

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

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


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>" .
+47
07 июн. '17 в 14:44
источник

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

+35
27 июл. '11 в 22:38
источник

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

+26
17 июл. '13 в 8:21
источник
1. git reset HEAD^ --hard
2. git push origin -f

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

+22
10 авг. '16 в 8:41
источник

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

 git push -f origin last_known_good_commit:branch_name

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

git reset --hard HEAD~1

ссылка

+16
07 мар. '17 в 1:27
источник

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

git reset --soft HEAD~1

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

git reset --hard HEAD~1
+13
15 нояб. '17 в 12:39
источник

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

git push origin +[ref]:[branchName]

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

git push origin +7f6d03:master

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

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

+9
22 июн. '15 в 10:36
источник

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

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

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force
+9
20 дек. '16 в 14:21
источник

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

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

+6
02 янв. '17 в 14:01
источник

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

git reset HEAD~n

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

git push -f origin <branch>

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

+5
18 янв. '17 в 2:23
источник

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

git rebase --preserve-merges -i HEAD^^
+3
21 мая '14 в 0:09
источник

Для GitHub

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

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

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

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

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

git push origin +g0834hg304gh3084gh:master

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

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

+2
08 февр. '16 в 13:37
источник

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

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

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

0
15 нояб. '17 в 9:56
источник

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

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

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

-1
19 июл. '18 в 11:05
источник

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

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

-1
17 июл. '14 в 12:44
источник

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

git rm classdir
git add sourcedir

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

git commit --amend

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

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

-1
07 янв. '16 в 6:20
источник

Посмотрите другие вопросы по меткам или Задайте вопрос