2012-03-16 12 views

Odpowiedz

3

myślę, że można cofnąć lokalnie i popchnąć wynik:

$ git reset HEAD^ --hard 
$ git push REMOTE -f 

Gdzie PILOT "jest nazwa zdalnej.

+3

Możesz * to zrobić, ale jest to niewskazane, ponieważ ktoś, kto w międzyczasie złapał zatwierdzenie, będzie ... cóż, aby uniknąć złych słów, powiedzmy: "będą musieli ciężko pracować, aby wyleczyć się z twoich działań . " :-) Lepiej użyć "git revert", aby dodać nowy commit, który cofa poprzednie zatwierdzenie. (Pomyśl o "przywróceniu" jako "dodaj zatwierdzenie, którego łatka jest akcją polegającą na dokładnym cofnięciu poprzedniego zatwierdzenia", ponieważ tak właśnie jest.) – torek

+0

@torek Myślę o tym na początku, ale myślę, że shadowfax może mieć inne celów, takich jak utrzymanie każdego zdalnego zatwierdzania zdolnego do poprawnego działania, w przeciwnym razie pomyślałby o "przywróceniu i popchnięciu". – peter

+1

Myślę, że możesz być zaskoczony, jak wiele osób nie rozumie "git revert".Z drugiej strony może istnieć zupełnie inny motyw (jak w odpowiedzi Davida M. Syzdka). W niektórych przypadkach nie ma dobrych rozwiązań, tylko najgorszy (który różni się w zależności od sytuacji). – torek

27

Ponieważ już przekazałeś zatwierdzenia do zdalnego repozytorium, najlepszym sposobem jest prawdopodobnie przywrócenie tych dwóch zatwierdzeń, aby nie stwarzać problemów dla każdego, kto już wyjął ze zdalnego repozytorium.

Przykłady wykorzystywać historię Poniżej popełnienie:

e512d38 Adding taunts to management. 
bd89039 Adding kill switch in case I'm fired. 
da8af4d Adding performance optimizations to master loop. 
db0c012 Fixing bug in the doohickey 

Jeśli chcesz po prostu cofnąć zobowiązuje bez modyfikowania historię, można wykonać następujące czynności:

git revert e512d38 
git revert bd89039 

Ewentualnie, jeśli don” Jeśli chcesz, aby inni zobaczyli, że dodano przełącznik zabijania, a następnie go usunęli, możesz przywrócić repozytorium za pomocą następujących elementów (jednak spowoduje to problemy dla innych, którzy już wyciągnęli twoje zmiany z pilota):

git reset --hard da8af4d 
git push origin -f localBranch:remoteBranch 

gdzie localBranch to nazwa lokalnego oddziału, a remoteBranch to nazwa zdalnego oddziału.

+3

"Dodawanie drwin do zarządzania" rodzi stare (nowe?) Powiedzenie "nie pić i pchać". :-) – torek

+6

@torek Co mogę powiedzieć, jestem zaangażowanym pijakiem i picie alkoholu. –

0

Najpierw wpisz to polecenie.

git log -n 4 

To polecenie wyświetli 4 ostatnie zatwierdzenia z ich SHA. Następnie wpisz następujące polecenie.

git rebase -i SHA_ID 

Zamiast SHA_ID wpisz SHA zatwierdzenia przed zatwierdzeniem, które chcesz usunąć.

Po tym pliku otworzy się, na górze tego pliku zobaczysz SHA i komunikat zatwierdzenia, które chcesz usunąć. Usuń tę linię i zapisz i wyjdź z pliku.

Kiedy to zrobisz, musisz pchnąć. Wpisz następujące polecenie.

git push -f origin master 

Po zakończeniu tego procesu widać, że zatwierdzenie zostało usunięte.

Powiązane problemy