Mamy zdalne repozytorium git, które normalnie wdrażamy, wykorzystując git push
na naszym serwerze deweloperskim, a następnie git pull
na naszych serwerach na żywo, aby uzyskać najnowszą wypchniętą wersję repozytorium.
Ale jeśli popełniliśmy i wypuściliśmy kilka poprawek (bez opcji git pull
na serwerach na żywo), w jaki sposób możemy zrobić, git pull
że odnosi się do starszego zatwierdzenia, które chcemy?
tj. coś podobnego git pull -r 3ef0dedda699f56dc1062b5dcc2c59f7ad93ede4
git pull server:repo
porównaniu do zwykłegogit pull
)uploadpack.allowReachableSHA1InWant
Od wersji Git 2.5.0 tę zmienną konfiguracyjną można włączyć na serwerze, tutaj żądanie funkcji GitHub i zatwierdzenie GitHub włączające tę funkcję .
Serwer Bitbucket włączył go od wersji 5.5+ .
Stosowanie:
źródło
Jeśli jakiś proces na twoim serwerze na żywo natychmiast uzyskuje dostęp do właśnie pobranej zawartości (tzn. Nie możesz pracować
git checkout 3ef0d
po ściągnięciu), powinieneś rozważyć oznakowanie wersji, którą chcesz wdrożyć w produkcji, a konkretnie wypisanie tego tagu na produkcji, aby pobieranie nie było natychmiast zmień katalog roboczy. W przeciwnym razie ryzykowałbyś, że ktoś pcha tuż przed twoim pociągnięciem.źródło
Zauważ, że
git pull git checkout my-old-commit
teraz pozostawia cię w stanie ODŁĄCZONEJ GŁOWICY - w efekcie wysyłasz przyszłe zatwierdzenia w tym repozytorium nową ścieżką zatwierdzania. W przypadku repozytorium wdrażania nie jest to poważny problem, ponieważ jedynymi zatwierdzeniami powinny być te, które zostały już poprawnie zatwierdzone przed pobraniem.Czasami jednak przydatne jest sprawdzenie, czy znaczniki zatwierdzeń (head, tagi, piloty) wyglądają identycznie jak master repo. Aby to naprawić, wykonaj następujące czynności:
git reset
- ponownie podłącza głowęgit fetch
- synchronizuje markery dla pilotów [może to zależeć od wersji git - co prawda nasze środowisko jest wciąż w wersji 1.7 ... więc może nie być już wymagane YMMV]źródło