2012-10-12 5 views
14

Myślę, że zawiedli mi tutaj.Przywróć poprzednie zatwierdzenie - Github dla MAC (powrót jest już w toku)

Wprowadziłem kilka zmian do mojego kodu z ostatniego zatwierdzenia dodając nowe funkcjonalności i zdałem sobie sprawę, że jakiś inny kod działał dziwnie. Postanowiłem wrócić do starego zatwierdzenia (również do zdalnego), aby przetestować działanie tej funkcji.

Zanim nacisnąłem Rollback, popełniłem wprowadzone zmiany, ponieważ nie chciałem ich zgubić. Po popełnieniu (nie pchaniu do zdalnego), zrobiłem wycofanie do tego starego zatwierdzenia. (zauważ, że było sporo commitów pomiędzy zatwierdzeniem, które wycofałem, a tym, które właśnie popełniłem).

Wszystko działało poprawnie, a mój kod powrócił do tego zatwierdzenia. W tym zatwierdzeniu funkcjonalność również nie działała, więc postanowiłem wrócić do mojego ostatniego zatwierdzenia.

Jednak nie wiedziałem, jak to zrobić z wyjątkiem powrotu do ostatniego zatwierdzenia. Ale to spowodowało błąd.

error: a cherry-pick or revert is already in progress 
hint: try "git cherry-pick (--continue | --quit | --abort)" 
fatal: revert failed 
(32768) 

Wygląda na to, że większość rzeczy wróciła, ale obecna wersja kodu to nie to samo co moje ostatnie zatwierdzenie. Jest gdzieś pośrodku. = (

Co zrobiłem źle? [Nie pytam z niewinnością, wiem, że zrobił to źle;)]

Co było we właściwy sposób to zrobić? [Myślę, że powinien najpierw rozgałęzione]

Odpowiedz

17

nie wiem co GitHub for Mac wycofywania robi, ale wydaje się, że można byłoby lepiej wyłączyć za pomocą wiersza polecenia, aby rozwiązać ten problem pod ręką:

git cherry-pick --abort - do zaprzestania wszelkich cherry-picking w toku

git branch -va - pokaże, gdzie są Twoje wskaźniki teraz

upewnij się, że katalog roboczy jest czysty: git status - nie powinny wykazywać żadnych plików zmodyfikowanych lub stopniowym

git stash - jeśli cokolwiek modyfikować nadal obecne

git reset --hard your_local_branch github/remote_branch - uczynić lokalny oddział odzwierciedlają stan jak to jest na stronie zdalnej. oczywiście nie trzeba wykonywać resetowania, jeśli bieżąca gałąź wskaże na to samo zatwierdzenie, co pilot. Jeśli jesteś w odłączonym stanie HEAD (status git powie ci o tym), to wróć do normalnego stanu po prostu sprawdź swój lokalny oddział.

teraz zdecydować, co właściwie chcemy osiągnąć:

I. pozbyć się wadliwy popełnić?

Wykorzystanie interaktywnych rebase i usunąć linię z wadliwy popełnienia, następnie wcisnąć na siłę do zdalnego repo na github (słownie wadliwy commit się 10 commity temu)

git rebase -i HEAD~11

II. przywrócić wadliwe zatwierdzenie? - nie polecałbym tego po innych zatwierdzeniach, chyba że jesteś absolutnie pewny, że następujące zatwierdzenia nie dotknęły tego samego fragmentu kodu.Będzie to skutecznie utworzyć odwrotnej popełnienia (jeśli linia została dodana przez wadliwe popełnienia zostanie usunięty przez Cofnij i odwrotnie)

git revert {commit-sha1}

III. Czy masz błędne zatwierdzenie? użyj interaktywnego rebase, ale poinstruuj go, aby zatrzymał się na błędnym zatwierdzeniu do zmiany. Po zatrzymaniu edycji zmiany i kontynuowaniu ponownego tworzenia, należy nacisnąć przycisk do zdalnego oddziału (użyj polecenia rebase z rozwiązania I)

Po zakończeniu pracy, jeśli coś zostało ukryte, użyj git stash pop, aby przywrócić zmiany.

nadzieję, że pomoże!