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

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

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

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

1261
16 янв. '09 в 2:20
источник поделиться
20 ответов

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

917
16 янв. '09 в 2:24
источник
git push -f origin HEAD^:master

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

796
16 янв. '09 в 3:11
источник

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

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

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

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

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

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

И что это.

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

56
09 февр. '16 в 14:58
источник

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

34
28 июля '11 в 1: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 не было).

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

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

15
10 авг. '16 в 11:41
источник

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

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

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

 git push -f origin last_known_good_commit:branch_name

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

git reset --hard HEAD~1

ссылка

11
07 марта '17 в 4:27
источник

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

git push origin +[ref]:[branchName]

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

git push origin +7f6d03:master

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

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

8
22 июня '15 в 13:36
источник

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

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

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force
7
20 дек. '16 в 17: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

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

5
02 янв. '17 в 17:01
источник

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

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

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

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

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

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

git push origin +g0834hg304gh3084gh:master

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

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

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

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

git reset HEAD~n

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

git push -f origin <branch>

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

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

Для GitHub - Reset ваши коммиты (HARD) в вашем локальном репо и создайте новую ветку. Нажмите новый. Удалить ветку OLD. (Создайте новый как ветвь по умолчанию, если вы удаляете ветвь мастера)

0
20 сент. '17 в 5:32
источник

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

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 в 12:56
источник

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

git reset --soft HEAD~1

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

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

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

git rm classdir
git add sourcedir

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

git commit --amend

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

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

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

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

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

-2
17 июля '14 в 15:44
источник

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