GIT ongedaan maken van een commit dat is niet de meest recente, rebase alle commits sinds

Eerder op, dat ik verplicht een bepaalde code die op het tijdstip leek het een goed idee, maar in feite maakte het nog erger. Ik zou graag het verwijderen van de verandering van de geschiedenis is het niet handig, en rebasen alle commits, omdat ze moeten allemaal samenvoegen zonder problemen.

Ik probeerde het creëren van een nieuwe tak (de zogenaamde newMaster) onmiddellijk vóór de slechte commit (met gitx), het controleren van het uit en loopt:

git rebase -i master

Die AFAICS moet hebben mij een lijst van de pleegt op master en de optie voor het samenvoegen of niet samenvoegen, maar in plaats daarvan zei noop, en snel doorgestuurd newMaster te worden gelijk aan de meester.

Wat is de makkelijkste manier om te doen wat ik nodig?

InformationsquelleAutor rjmunro | 2009-12-28

 

3 Replies
  1. 13

    git rebase -i is de juiste opdracht, maar u wilt om het te doen van de tak met de laatste wijzigingen, en pas in de herziening is de “basis” van de rebase werking (de herziening onmiddellijk vóór de slechte commit). Dus, als u hebt gemaakt van een tak last-good-commit dat verwijst naar de laatste goede plegen, je zou willen uitvoeren met de volgende, terwijl op master:

    git rebase -i last-good-commit
    
    • Het verstrekken van meer argumenten kan het meer intuïtieve, te git rebase -i last-good-commit master doet hetzelfde (controles uit master dan rebases met de laatst-goed-plegen als de basis).
  2. 29

    De gemakkelijkste manier om te doen wat je wilt is om te blijven op (of re-checkout) de tak die u wilt bewerken en uitvoeren.

    git rebase --onto <sha1-of-bad-commit>^ <sha1-of-bad-commit>
    

    Dit zal rebase alles sinds de slechte commit op het slechte commit ‘ s ouders, effectief in het verwijderen van de slechte commiit van uw huidige tak van de geschiedenis. Natuurlijk moet je om conflicten op te lossen als ze zich voordoen.

    • U hoeft te doen een git push --force voor het werk. Maar heel voorzichtig mee zijn.
  3. 2

    Met rebase, ik was niet in staat om de wijzigingen op de afstandsbediening, en mijn rebasen, werd geannuleerd bij elke trek.

    Ik er in geslaagd het terugdraaien van een nauwkeurige vastlegging (niet het laatste) met eenvoudig:

    git revert <sha-of-bad-commit>
    

    En toen was ik ook in staat om met een druk op de afstandsbediening

    • Als u rebase na een duw, moet u dwingen het duwen met behulp van git push -f. Gebruik deze met extreme voorzichtigheid, want je kan het verwijderen van andere volkeren wijzigingen op de plaats van bestemming.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *