Powiedz, że pilot jest, origina gałąź jest master, i powiedz, że już się masterwyewidencjonował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 HEADgałąź 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.
.gitFolder 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