Byłoby pomocne, gdybyś mógł podać więcej szczegółów. Czy chcesz przejąć zawartość wszystkich plików ze zdalnego oddziału, czy tylko niektórych plików (tj. Zachować niektóre lokalne wersje / zmiany)? Czy masz jakąś lokalną historię, którą chcesz zachować? (Może to być ważne, jeśli istnieją inne gałęzie lub repozytoria, które już włączyły Twoją historię lokalną). Jeśli chcesz zachować historię lokalną, co planujesz z nią zrobić później? (Możesz zostawić znacznik wskazujący na lokalną historię i po prostu zresetować oddział do tego, co ma pilot, lub możesz chcieć „scalić ich”).
Warto zauważyć, że spowoduje to odłączenie HEAD - pytający może wolałby zostać na gałęzi zgit stash; git fetch origin; git reset --hard origin/master
Markiem Longair
10
Myślę, że komentarz Marka Longaira jest właściwą odpowiedzią na to pytanie
to była dla mnie najbardziej użyteczna odpowiedź +1
Andres
Jak wrócić do stanu sprzed git stash? git stash listjest pusty.
Leo
Chcę cię przytulić
Ugur Kazdal
45
Rozumiem to pytanie tak: chcesz całkowicie zastąpić zawartość jednego pliku (lub zaznaczenia) z nadrzędnego. Nie chcesz bezpośrednio wpływać na indeks (więc jak zwykle przechodzisz przez add + commit).
Rozumiem, że na przykład błędnie zapisałeś plik, który zaktualizowałeś tylko do celów testowych. Następnie, kiedy uruchomisz "git status", plik pojawi się jako "Zmodyfikowany" i wypowiesz kilka złych słów. Chcesz po prostu przywrócić starą wersję i kontynuować normalną pracę.
W tym scenariuszu możesz po prostu uruchomić następujące polecenie:
Dla mnie działało w ten sposób "git checkout zdalne / pochodzenie / mistrz <my-file>"
saravanakumar
4
Użyj opcji -slub --strategypołączonej z -Xopcją. W swoim konkretnym pytaniu chcesz zachować wszystkie zdalne pliki i zastąpić pliki lokalne o tej samej nazwie.
Zastąp konflikty wersją zdalną
git merge -s recursive -Xtheirs upstream/master
użyje wersji repozytorium zdalnego wszystkich plików będących w konflikcie.
Zastąp konflikty wersją lokalną
git merge -s recursive -Xours upstream/master
użyje wersji lokalnego repozytorium wszystkich plików będących w konflikcie.
git merge -s their
.Odpowiedzi:
To najbezpieczniejsze rozwiązanie:
Teraz możesz robić, co chcesz, bez obawy o konflikty.
Na przykład:
Jeśli chcesz uwzględnić zdalne zmiany w gałęzi głównej, możesz zrobić:
Spowoduje to, że gałąź „master” wskaże na „początek / wzorzec”.
źródło
git stash; git fetch origin; git reset --hard origin/master
git stash
?git stash list
jest pusty.Rozumiem to pytanie tak: chcesz całkowicie zastąpić zawartość jednego pliku (lub zaznaczenia) z nadrzędnego. Nie chcesz bezpośrednio wpływać na indeks (więc jak zwykle przechodzisz przez add + commit).
Po prostu zrób
Jeśli chcesz to zrobić dla obszernych poddrzew i zamiast tego chcesz bezpośrednio wpływać na indeks, użyj
Następnie możesz (opcjonalnie) zaktualizować swoją kopię roboczą, wykonując
źródło
Rozumiem, że na przykład błędnie zapisałeś plik, który zaktualizowałeś tylko do celów testowych. Następnie, kiedy uruchomisz "git status", plik pojawi się jako "Zmodyfikowany" i wypowiesz kilka złych słów. Chcesz po prostu przywrócić starą wersję i kontynuować normalną pracę.
W tym scenariuszu możesz po prostu uruchomić następujące polecenie:
źródło
Pobrałbym zdalny plik z "master" (repozytorium zdalnego / pochodzenia) w następujący sposób:
Przykład: git checkout master components / indexTest.html
źródło
Użyj opcji
-s
lub--strategy
połączonej z-X
opcją. W swoim konkretnym pytaniu chcesz zachować wszystkie zdalne pliki i zastąpić pliki lokalne o tej samej nazwie.Zastąp konflikty wersją zdalną
użyje wersji repozytorium zdalnego wszystkich plików będących w konflikcie.
Zastąp konflikty wersją lokalną
użyje wersji lokalnego repozytorium wszystkich plików będących w konflikcie.
źródło