Jak mogę usunąć commit na Githubie? [duplikat]

to pytanie ma już odpowiedzi tutaj : cofanie 'git push' (13 Odpowiedzi) Zamknięte 1 rok ago .

"przypadkowo" wcisnąłem commit do Githuba.

Czy można usunąć ten commit?

Chcę przywrócić moje repozytorium GitHub tak, jak było przed zatwierdzeniem tego commita.

Author: Amir, 2009-01-15

21 answers

Uwaga: Zobacz alternatywę dla git rebase -i w komentarzach poniżej -

git reset --soft HEAD^

Najpierw usuń commit z lokalnego repozytorium. Możesz to zrobić używając git rebase -i. Na przykład, jeśli jest to twój ostatni commit, możesz wykonać git rebase -i HEAD~2 i usunąć drugą linię w oknie edytora, które się pojawi.

Następnie Wymuś push do GitHub używając git push origin +branchName --force

Zobacz Git Magic Rozdział 5: lekcje historii - a potem jakieś Po Więcej informacji (np. jeśli chcesz usunąć starsze commity).

Jeśli Twoje pracujące drzewo jest brudne, musisz najpierw zrobić git stash, a potem git stash apply.
 1259
Author: Can Berk Güder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-29 21:49:12
git push -f origin HEAD^:master

To powinno "cofnąć" pchnięcie.

 979
Author: Dustin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-16 00:11:01

Dla łatwego powrotu, jeśli to tylko błąd (być może rozwidliłeś repo, a następnie popchnąłeś do oryginału zamiast do nowego) oto inna możliwość:

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

Oczywiście Zamień ten numer na numer commita, do którego chcesz powrócić.

Wszystko od tego czasu zostanie usunięte po ponownym naciśnięciu. Aby to zrobić, następnym krokiem będzie:

git push --force
 376
Author: CodeWalrus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-18 00:30:56
  1. git log aby dowiedzieć się, jaki commit chcesz przywrócić

  2. git push origin +7f6d03:master podczas gdy 7f6d03 jest commitem przed błędnie pchniętym commitem. + było dla force push

I to wszystko.

Tutaj jest bardzo dobry przewodnik, który rozwiązuje twój problem, łatwe i proste!

 114
Author: kate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-17 14:20:11

Jeśli chcesz zachować zmiany w commicie po usunięciu:

zauważ, że to rozwiązanie działa, jeśli commit do usunięcia jest ostatnim zatwierdzonym.


1-skopiuj odniesienie do zatwierdzenia, do którego chcesz wrócić z dziennika:

git log

2-Zresetuj git do odwołania do zatwierdzenia:

 git reset <commit_ref>

3-przechowuj / przechowuj lokalne zmiany z błędnego commita, aby użyć później po naciśnięciu na remote:

 git stash

4-przesuń zmiany do zdalne repozytorium, (- f lub --force):

git push -f

5-zwróć zapisane zmiany do lokalnego repozytorium:

git stash apply

7 - W przypadku, gdy nie śledzisz / nowe pliki w zmianach, musisz dodać je do git przed zatwierdzeniem:

git add .

6-Dodaj dodatkowe zmiany, których potrzebujesz, a następnie zatwierdź potrzebne pliki (lub użyj kropki '.'zamiast podawać nazwę KAŻDEGO pliku, aby zatwierdzić wszystkie pliki w lokalnym repozytorium:

git commit -m "<new_commit_message>" <file1> <file2> ...

Lub

git commit -m "<new_commit_message>" .
 73
Author: Loukan ElKadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-14 14:53:37

Musisz wyczyścić pamięć podręczną, aby została całkowicie wyczyszczona. ta strona pomocy od git ci pomoże. (pomogło mi) http://help.github.com/remove-sensitive-data/

 37
Author: subutux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-27 22:38:42

Usuń najnowszy commit, zachowując wykonaną pracę:

git reset --soft HEAD~1

Usuń najnowszy commit, niszcząc pracę, którą wykonałeś:

git reset --hard HEAD~1
 29
Author: Ekambaram E,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-15 12:39:15

Użyj git revert do odwrócenia pchnięcia.

Git-revert-przywraca istniejące commity

git revert [--edit | --no-edit] [-n] [-m parent-number] [-s] <commit>...
git revert --continue
git revert --quit
git revert --abort

Przywróci zmiany wprowadzone przez powiązane łaty i zarejestruje kilka nowych commitów, które je rejestrują. Wymaga to, aby Twoje działające drzewo było czyste(bez modyfikacji z commita HEAD).

 27
Author: Jyoti Prakash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-26 17:33:50
1. git reset HEAD^ --hard
2. git push origin -f
To mi pasuje.
 26
Author: Hilen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-10 08:41:55

Aby usunąć commit ze zdalnego repozytorium:

 git push -f origin last_known_good_commit:branch_name

Aby usunąć commit z lokalnego repozytorium:

git reset --hard HEAD~1

Link

 21
Author: george mano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:48

Musisz znać hash swojego commita z commita, do którego chcesz powrócić. Możesz go pobrać z adresu URL GitHub, takiego jak: https://github.com/your-organization/your-project/commits/master

Załóżmy, że hash z commita (do którego chcesz wrócić) to " 99fb454 "(długa wersja "99fb45413eb9ca4b3063e07b40402b136a8cf264"), to wszystko co musisz zrobić to:

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force
 18
Author: Benny Neugebauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-20 14:21:29

Znajdź Spec ref commita, którego chcesz być szefem swojej gałęzi na Githubie i użyj następującego polecenia:

git push origin +[ref]:[branchName]

W Twoim przypadku, jeśli chcesz wrócić do jednego commita, znajdź początek ref dla tego commita, powiedzmy na przykład, że jest to 7f6d03, i nazwę gałęzi, którą chcesz zmienić, powiedzmy na przykład, że jest to master i wykonaj następujące czynności:

git push origin +7f6d03:master

Znak plus jest interpretowany jako --force, co będzie konieczne, ponieważ przepisujesz historia.

Zauważ, że za każdym razem, gdy tworzysz commit, możesz potencjalnie przepisać historię innych ludzi, którzy połączą Twoją gałąź. Jeśli jednak szybko złapiesz problem (zanim ktoś inny połączy Twoją gałąź), nie będziesz miał żadnych problemów.

 11
Author: orb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-22 10:36:58

Jeśli robisz to, ponieważ masz poufne dane w zatwierdzeniu, Używanie innych odpowiedzi tutaj nie jest bezpieczne (z wyjątkiem subutux, które rozwinię).

Przewodnik github na tym zaleca użycie zewnętrznego narzędzia, ale wolę używać wbudowanego.

Po pierwsze, Wykonaj kopię zapasową swojego repozytorium . Wtedy:

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

Następnie, Upewnij się, że repozytorium jest w żądanym stanie . Możesz chcieć odróżnić się od wsparcie.

Jeśli jesteś pewien, że jest poprawny, to:

#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all
Na wszelki wypadek możesz zachować lokalną kopię zapasową.
 8
Author: goncalopp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-02 14:01:18

Uruchom to polecenie na swoim terminalu.

git reset HEAD~n

Możesz usunąć ostatnie N commitów z lokalnego repo, np. HEAD~2. Wykonaj polecenie git push na swoim repozytorium.

git push -f origin <branch>
Mam nadzieję, że to pomoże!
 5
Author: Kent Aguilar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-18 02:23:40

Aby zachować strukturę rozgałęzień i scalania, należy użyć opcji --preserve-merges podczas rebase:

git rebase --preserve-merges -i HEAD^^
 4
Author: Carlos Mafla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-17 18:15:31

Dla GitHub

  • zresetuj swoje commity (twarde) w lokalnym repozytorium
  • Utwórz nową gałąź
  • Push the new branch
  • Usuń starą gałąź (Utwórz nową jako domyślną, jeśli usuwasz gałąź główną)
 3
Author: M_R_K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-04 11:35:37

Zapisz najpierw lokalne zmiany gdzieś z boku (kopia zapasowa)

Możesz przeglądać ostatnie zmiany, a następnie wybrać hash zmian, klikając na Przycisk "Kopiuj pełny SHA", aby wysłać go do schowka.

Jeśli twój ostatni hash commit jest, powiedzmy g0834hg304gh3084gh (na przykład )

Musisz uruchomić:

git push origin +g0834hg304gh3084gh:master

Używając wcześniej skopiowanego hasha, aby zmienić go na" HEAD".

Dodaj pożądane zmiany lokalne. Zrobione;)

 2
Author: Деян Добромиров,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-13 12:22:30

Jeśli chcesz usunąć do interactive rebase,

git rebase -i HEAD~4

4 represents total number of commits to display count your commit andzmień go odpowiednio

I usuń commit, który chcesz z listy...

Zapisz zmiany przez Ctrl + X (ubuntu) lub :WQ (centos)

Druga metoda, do revert,

git revert 29f4a2 #your commit ID

To przywróci określony commit

 1
Author: Mohideen bin Mohammed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-15 09:56:10

W GitHub Desktop możesz po prostu kliknąć prawym przyciskiem myszy commit i przywrócić go, co spowoduje utworzenie nowego commita, który cofnie zmiany.

Przypadkowy commit nadal będzie w twojej historii (co może być problemem, jeśli na przykład przypadkowo użyłeś klucza lub hasła API), ale kod zostanie przywrócony.

Jest to najprostsza i najłatwiejsza opcja, przyjęta odpowiedź jest bardziej wyczerpująca.

 1
Author: Keith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-19 11:05:32

Nie jest zbyt dobrze pisać historię na nowo. Jeśli użyjemy git revert <commit_id>, utworzy on czysty Reverse-commit o podanym identyfikatorze.

W ten sposób historia nie jest przepisywana na nowo, zamiast tego każdy wie, że nastąpiło odwrócenie.

 0
Author: vivek_ganesan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-17 12:44:24

Dodaj/usuń pliki, aby uzyskać rzeczy tak, jak chcesz:

git rm classdir
git add sourcedir

Następnie zmień commit:

git commit --amend

Poprzedni, błędny commit zostanie edytowany, aby odzwierciedlić nowy stan indeksu - innymi słowy, będzie to tak, jakbyś nigdy nie popełnił błędu

Zauważ, że powinieneś to zrobić tylko wtedy, gdy jeszcze nie naciskałeś. Jeśli popchnąłeś, będziesz musiał normalnie wprowadzić poprawkę.

 -1
Author: Chirag Thakar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-07 06:20:12