Chcę zrobić, git pull
ale tylko do określonego zatwierdzenia.
A->B->C->D->E->F (Remote master HEAD)
więc przypuśćmy, że moja local master
GŁOWA wskazuje na B
i chcę ciągnąć do E
. Co powinienem zrobić ?
To nie jest ściąganie określonego zatwierdzenia, to jest ciągnięcie do określonego zatwierdzenia.
git fetch
igit merge E
.Odpowiedzi:
git pull
jest niczym innym, jak tylkogit fetch
następujegit merge
. Więc co możesz zrobić, togit fetch remote example_branch
git merge <commit_hash>
źródło
git merge E
połączy sięE
ze wszystkimi swoimi przodkamiC
iD
(git o tym wieA
iB
nie musi być łączony, ponieważ znajdował się już w twojej gałęzi). Jeśli TYLKO chcesz zmianyE
, powinieneśgit cherry-pick E
zamiast tego.Najpierw pobierz najnowsze zatwierdzenia ze zdalnego repozytorium. Nie wpłynie to na Twój lokalny oddział.
Następnie sprawdź gałąź zdalnego śledzenia i zrób dziennik git, aby zobaczyć zatwierdzenia
Chwyć skrót zmiany zatwierdzenia, z którym chcesz się połączyć (lub tylko pierwsze ~ 5 znaków) i połącz ten zatwierdzenie w master
źródło
git fetch
przed napisaniem takich bzdur. Co więcej, powinieneś przeczytać oryginalne pytanie i moją odpowiedź. Jeśli zastosujesz się do mojej odpowiedzi, nie wrócisz do historii, tak jak wyraźnie polecam użytkownikowigit checkout master
. Ogólnie rzecz biorąc, nie publikuj żadnych rzeczy, jeśli nie masz co najmniej 50% pewności co do tego, co robisz.git fetch origin
jawnie pobiera źródło .Możesz także pobrać najnowsze zatwierdzenie i po prostu cofać, aż zatwierdzenie, którego chcesz:
Zastąp
master
żądaną gałęzią.Użyj dziennika git, aby zobaczyć, do którego zatwierdzenia chcesz przywrócić:
Osobiście to działa lepiej dla mnie.
Zasadniczo, to, co to robi, to ściąganie ostatniego zatwierdzenia i ręczne cofanie zatwierdzeń jeden po drugim. Użyj dziennika git, aby zobaczyć historię zatwierdzeń.
Zalety: działa zgodnie z reklamą. Nie musisz używać wartości skrótu zatwierdzania ani wyciągać niepotrzebnych gałęzi.
Złe punkty: Musisz cofnąć zatwierdzenia o jeden.
OSTRZEŻENIE: Zatwierdź / ukryj wszystkie lokalne zmiany, ponieważ wraz z
--hard
tobą je stracisz. Używaj na własne ryzyko!źródło
HEAD
zanim wrócisz - i nie wiem, co by się stało, gdybyś musiał rozwiązać konflikty. Ale to rozwiązanie pozwalagit pull --rebase
i w przeciwieństwie do tego, co zostało powiedziane, możesz bezpośrednio zresetować z powrotem doN
zatwierdzeń wstecz za pomocągit reset --hard HEAD~N
(tj. Dla 3 zatwierdzeńgit reset --hard HEAD~3
).git reset --hard SHA
i zresetuje go do żądanego zatwierdzenia, bez konieczności liczenia wstecz.Jeśli połączysz zatwierdzenie w swojej gałęzi, powinieneś uzyskać całą historię pomiędzy.
Przestrzegać:
źródło
Znalazłem zaktualizowaną odpowiedź z tego filmu , zaakceptowana odpowiedź nie działa dla mnie.
Najpierw sklonuj najnowsze repozytorium z gita (jeśli nie było) przy użyciu
git clone <HTTPs link of the project>
(lub używając SSH), a następnie przejdź do gałęzi pragnienia za pomocągit checkout <branch name>
.Użyj polecenia
aby sprawdzić najnowsze zatwierdzenia. Skopiuj shal konkretnego zatwierdzenia. Następnie użyj polecenia
Po naciśnięciu klawisza enter. Teraz użyj polecenia
Teraz konkretne zatwierdzenie będzie dostępne dla twojego lokalnego. Zmień cokolwiek i prześlij kod za pomocą
git push origin <branch name>
. To wszystko. Sprawdź wideo w celach informacyjnych.źródło
To działa dla mnie:
na przykład
To ciągnie 28eb00, ff39e4 i wszystko wcześniej, ale nie pobiera f4d10ad. Pozwala na użycie pull --rebase i honours pull settings w twoim gitconfig. To działa, ponieważ w zasadzie traktujesz 28eb00 jako gałąź.
W przypadku używanej przeze mnie wersji git ta metoda wymaga pełnego skrótu zatwierdzenia - żadne skróty ani aliasy nie są dozwolone. Możesz zrobić coś takiego:
źródło