Powiedz, że pilot jest, origin
a gałąź jest master
, i powiedz, że już się master
wyewidencjonowałeś, spróbuj wykonać następujące czynności:
git fetch origin
git reset --hard origin/master
To po prostu pobiera bieżącą gałąź i wskazuje ją na HEAD
gałąź zdalną.
OSTRZEŻENIE : Jak stwierdzono w komentarzach, spowoduje to odrzucenie lokalnych zmian i nadpisanie tym, co znajduje się w źródle .
Lub możesz użyć poleceń hydraulicznych, aby zrobić zasadniczo to samo:
git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
EDYCJA: Chciałbym krótko wyjaśnić, dlaczego to działa.
.git
Folder może trzymać zobowiązuje dla dowolnej liczby repozytoriów. Ponieważ skrót zatwierdzenia jest w rzeczywistości metodą weryfikacji zawartości zatwierdzenia, a nie tylko losowo wygenerowaną wartością, jest używany do dopasowywania zestawów zatwierdzeń między repozytoriami.
Gałąź to po prostu nazwany wskaźnik do danego skrótu. Oto przykładowy zestaw:
$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
Każdy z tych plików zawiera hash wskazujący na zatwierdzenie:
$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
Wszystkie są przeznaczone dla wewnętrznego mechanizmu magazynowania git i działają niezależnie od katalogu roboczego . Wykonując następujące czynności:
git reset --hard origin/master
git wskaże bieżącą gałąź na tę samą wartość skrótu, na którą wskazuje origin / master. Następnie wymusza zmianę katalogu roboczego, aby dopasować strukturę / zawartość pliku do tego skrótu.
Aby zobaczyć, jak to działa, wypróbuj następujące rozwiązania:
git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD
Miałem szczęście
w podobnej sytuacji.
http://www.kernel.org/pub//software/scm/git/docs/git-checkout.html
Cofnij usunięcie w GIT
źródło
Rozwiązane, używając następującego zestawu poleceń:
Sztuczka polega na tym, aby zmienić bazę zmian ... Mieliśmy problemy z przebudowaniem jednego trywialnego zatwierdzenia, więc po prostu pominęliśmy go za pomocą git rebase --skip (po skopiowaniu plików).
źródło
Jeśli kiedykolwiek napotkasz ten problem po uruchomieniu a,
git fetch
a następnie git nie pozwoli ci na uruchomienie zgit pull
powodu konfliktu scalania ( zarówno zmodyfikowanych / nie scalonych plików , jak i abyś był bardziej sfrustrowany, nie pokaże żadnych znaczników konfliktu w plik, ponieważ nie jest jeszcze scalony). Jeśli nie chcesz stracić swojej pracy, możesz wykonać następujące czynności.przygotować plik.
następnie schowaj lokalne zmiany.
ściągnij i zaktualizuj swój katalog roboczy
przywróć lokalny zmodyfikowany plik (git automatycznie połączy się, jeśli to możliwe, w przeciwnym razie go rozwiąże)
Mam nadzieję, że to pomoże.
źródło
Istnieje rozwiązanie, nawet jeśli nie chcesz usuwać lokalnych zmian. Po prostu napraw niescalone pliki (przez
git add
lubgit remove
). Więc zróbgit pull
.źródło
Zakładając, że chcesz odrzucić wszelkie wprowadzone zmiany, najpierw sprawdź dane wyjściowe
git status
. W przypadku każdego pliku, który obok niego jest napisany „nie scalony”, uruchomgit add <unmerged file>
. Następnie przejdź dogit reset --hard
. Pozwoli to pozbyć się wszelkich lokalnych zmian, z wyjątkiem nieśledzonych plików.źródło
git status
?git rebase --abort
igit pull --rebase
zgodnie z sugestią gitaZostałem rozwiązany za pomocą git, usuń niescalony plik lokalnie.
Kiedy później wyślę polecenie git:
źródło
Odpowiedź Ryana Stewarta była już prawie na miejscu. W przypadku, gdy faktycznie nie chcesz usuwać lokalnych zmian, istnieje przepływ pracy, którego możesz użyć do scalenia:
git status
. Wyświetli listę niescalonych plików.git commit
Git zatwierdzi tylko scalenia do nowego zatwierdzenia. (W moim przypadku miałem dodatkowe dodane pliki na dysku, które nie zostały wrzucone do tego zatwierdzenia).
Następnie Git uważa scalenie za udane i pozwala na przejście do przodu.
źródło