Hoe kan ik een commit op GitHub verwijderen?

Ik heb “per ongeluk” een commit naar GitHub gepusht.

Is het mogelijk om deze commit te verwijderen?

Ik wil mijn GitHub-repository terugzetten zoals het was voor deze commit.


Antwoord 1, autoriteit 100%

Opmerking:zie een alternatief voor git rebase -iin de opmerkingen hieronder—

git reset --soft HEAD^

Verwijder eerst de commit uit je lokale repository. Je kunt dit doen met git rebase -i. Als het bijvoorbeeld je laatste commit is, kun je git rebase -i HEAD~2doen en de tweede regel verwijderen in het editorvenster dat verschijnt.

Dwing vervolgens push naar GitHub met behulp van git push origin +branchName --force

Zie Git Magic Hoofdstuk 5: Lessen uit de geschiedenis – en Dan Sommigevoor meer informatie (bijv. als je oudere commits wilt verwijderen).

O, en als je werkboom vies is, moet je eerst een git stashdoen, en daarna een git stash apply.


Antwoord 2, autoriteit 78%

git push -f origin HEAD^:master

Dat zou de push moeten “ongedaan maken”.


Antwoord 3, autoriteit 32%

Voor een gemakkelijke terugkeer als het gewoon een fout is (misschien heb je een repo geforkt en ben je uiteindelijk naar het origineel gegaan in plaats van naar een nieuwe) is hier nog een mogelijkheid:

git reset --hard 71c27777543ccfcb0376dcdd8f6777df055ef479

Verwissel uiteraard dat nummer voor het nummer van de commit waarnaar je wilt terugkeren.

Alles sindsdien wordt verwijderd zodra u opnieuw drukt. Om dat te doen, zou de volgende stap zijn:

git push --force

Antwoord 4, autoriteit 10%

  1. git log
    om erachter te komen welke commit je wilt terugdraaien

  2. git push origin +7f6d03:master
    terwijl 7f6d03 de commit is vóór de verkeerd gepushte commit.
    +was voor force push

En dat is het.

Hieris een zeer goede gids die uw probleem gemakkelijk en eenvoudig oplost!


Antwoord 5, autoriteit 6%

In het geval dat je de commit-wijzigingen na het verwijderen wilt behouden:

Merk op dat deze oplossing werkt als de te verwijderen commit de laatste is die is vastgelegd.


1 – Kopieer de commit-referentie waar je naar terug wilt gaan uit het logboek:

git log

2 – Reset git naar de commit-referentie:

git reset <commit_ref>

3 – Stash/bewaar de lokale wijzigingen van de verkeerde commit om later te gebruiken nadat ze naar remote zijn gepusht:

git stash

4 – Duw de wijzigingen naar de externe repository, (-f of –force):

git push -f

5 – Haal de opgeslagen wijzigingen terug in de lokale repository:

git stash apply

7 – Als je niet-getrackte/nieuwe bestanden in de wijzigingen hebt, moet je ze toevoegen aan git voordat je ze vastlegt:

git add .

6 – Voeg alle extra wijzigingen toe die je nodig hebt, leg vervolgens de benodigde bestanden vast (of gebruik een punt ‘.’ in plaats van elke bestandsnaam op te geven, om alle bestanden in de lokale repository vast te leggen:

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

of

git commit -m "<new_commit_message>" .

Antwoord 6, autoriteit 3%

U moet uw cache leegmaken om deze volledig te wissen.
deze helppagina van git zal je helpen. (het heeft mij geholpen)
http://help.github.com/remove-sensitive-data/


Antwoord 7, autoriteit 3%

Verwijder de meest recente commit en behoud het werk dat je hebt gedaan:

git reset --soft HEAD~1

Verwijder de meest recente commit en vernietig het werk dat je hebt gedaan:

git reset --hard HEAD~1

Antwoord 8, autoriteit 2%

1. git reset HEAD^ --hard
2. git push origin -f

Dit werkt voor mij.


Antwoord 9, autoriteit 2%

Gebruik git revertom je push terug te zetten.

git-revert – Herstel enkele bestaande commits

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

Herstel de veranderingen die de gerelateerde patches introduceren, en neem enkele nieuwe commits op die ze opnemen. Dit vereist dat je werkboom schoon is (geen aanpassingen van de HEAD-commit).


Antwoord 10, autoriteit 2%

De commit verwijderen uit de externe repository:

git push -f origin last_known_good_commit:branch_name

Om de commit uit je lokale repository te verwijderen:

git reset --hard HEAD~1

link


Antwoord 11, autoriteit 2%

Je moet je commit-hash kennen van de commit waarnaar je wilt terugkeren. Je kunt het krijgen van een GitHub-URL zoals: https://github.com/your -organisatie/uw-project/commits/master

Laten we zeggen dat de hash van de commit (waar je terug wilt voeren) is “99FB454” (lange versie “99FB45413EB9CA4B3063E07B40402B136A8CF264”), dan hoeft u alleen maar:

git reset --hard 99fb45413eb9ca4b3063e07b40402b136a8cf264
git push --force

Antwoord 12

Zoek de REF-specificatie van de commit die u wilt zijn het hoofd van uw tak op GitHub en gebruik de volgende opdracht:

git push origin +[ref]:[branchName]

In uw geval, als u gewoon een commit wilt teruggaan, zoek dan het begin van de ref voor die commit, bijvoorbeeld, het is 7F6D03 en de naam van de tak die u wilt wijzigen, bijvoorbeeld het is Master en doe het volgende:

git push origin +7f6d03:master

Het plus-teken wordt geïnterpreteerd als --force, die nodig is omdat u de geschiedenis herschrijft.

Merk op dat u op elk moment u --forceeen commit wilt maken die u mogelijk de geschiedenis van andere mensen kunt herschrijven die uw filiaal samenvoegt. Als u echter snel het probleem vangt (voordat iemand anders uw filiaal versmelt), heeft u geen problemen.


Antwoord 13

Als u dit doet, omdat u gevoelige gegevens in een commit hebt, is het gebruik van de andere antwoorden hier niet veilig (uitzondering van subutux’s, die ik zal uitbreiden).

De GitHub-gids over deze beveelt aan een externe tool te gebruiken, maar ik Geef de voorkeur aan het gebruik van de ingebouwde.

Ten eerste, Maak een back-up van uw repository . Dan:

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

Hierna zorg ervoor dat de repository zich in de gewenste staat bevindt. Misschien wilt u een verschil maken met de back-up.

Als je zeker weet dat het juist is, dan:

#get rid of old unreferenced commits (including the data you want to remove)
git gc --prune=now
git push origin --force --all

Misschien wil je de lokale back-up een tijdje bewaren, voor het geval dat.


Antwoord 14

Voer deze opdracht uit op uw terminal.

git reset HEAD~n

Je kunt de laatste n commits uit de lokale repo verwijderen, b.v. HOOFD~2.
Ga verder met forceer git push op je repository.

git push -f origin <branch>

Hopelijk helpt dit!


Antwoord 15

Om de vertakkings- en samenvoegingsstructuur te behouden, is het belangrijk om de optie --preserve-mergeste gebruiken bij het uitvoeren van de rebase:

git rebase --preserve-merges -i HEAD^^

Antwoord 16

Voor GitHub

  • Reset je commits (HARD) in je lokale repository
  • Maak een nieuw filiaal
  • Duw de nieuwe tak
  • Verwijder OUDE vertakking (Maak een nieuwe als de standaard vertakking als u de hoofdvertakking verwijdert)

Antwoord 17

Sla uw lokale wijzigingen eerst ergens aan de zijkant op (back-up)

Je kunt door je recente commits bladeren en vervolgens een commit-hash selecteren door op te klikken
“Kopieer de volledige SHA”-knop om deze naar het klembord te sturen.

Als je laatste commit-hash is, laten we zeggen g0834hg304gh3084gh (bijvoorbeeld )

Je moet rennen:

git push origin +g0834hg304gh3084gh:master

Gebruik de hash die je eerder hebt gekopieerd om er de “HEAD”-revisie van te maken.

Voeg de gewenste lokale wijzigingen toe. Klaar 😉


Antwoord 18

als u interactieve rebase wilt verwijderen,

git rebase -i HEAD~4

4 represents total number of commits to display count your commit andwijzig het dienovereenkomstig

en verwijder de gewenste commit van de lijst…

Wijzigingen opslaan met Ctrl+X(ubuntu)of :wq(centos)

2e methode, terugdraaien,

git revert 29f4a2 #your commit ID

dit zal een specifieke commit terugdraaien


Antwoord 19

In GitHub Desktopkun je met de rechtermuisknop op de commit klikken en deze terugzetten, waardoor een nieuwe commit wordt gemaakt dat maakt de wijzigingen ongedaan.

De onbedoelde vastlegging staat nog steeds in je geschiedenis (wat een probleem kan zijn als je bijvoorbeeld per ongeluk een API-sleutel of wachtwoord hebt ingevoerd), maar de code wordt teruggedraaid.

Dit is de eenvoudigste en gemakkelijkste optie, het geaccepteerde antwoord is uitgebreider.


Antwoord 20

Het is niet erg goed om de geschiedenis te herschrijven. Als we git revert <commit_id>gebruiken, creëert het een schone reverse-commit van de genoemde commit-ID.

Op deze manier wordt de geschiedenis niet herschreven, maar weet iedereen dat er een terugkeer is geweest.


Antwoord 21

Bestanden toevoegen/verwijderen om alles te krijgen zoals u dat wilt:

git rm classdir
git add sourcedir

Pas vervolgens de commit aan:

git commit --amend

De vorige, foutieve commit zal worden bewerkt om de nieuwe indexstatus weer te geven – met andere woorden, het zal zijn alsof je nooit de fout hebt gemaakt

Houd er rekening mee dat je dit alleen moet doen als je nog niet hebt gepusht. Als je hebt gepusht, moet je gewoon normaal een fix uitvoeren.

Other episodes