Cóż, tak i nie ...
Rozumiem, że chcesz, aby Twoje lokalne kopie „nadpisały” to, co jest w pilocie, ale, o rany, jeśli ktoś zmodyfikował pliki w zdalnym repozytorium w inny sposób, a ty po prostu ignorujesz ich zmiany i próbujesz „wymusić” twoje własne zmiany, nawet nie patrząc na możliwe konflikty, cóż, płaczę za tobą (i twoimi współpracownikami) ;-)
To powiedziawszy, jednak naprawdę łatwo jest zrobić „właściwą rzecz…”
Krok 1:
git stash
w lokalnym repozytorium. Spowoduje to zapisanie lokalnych aktualizacji w skrytce, a następnie przywrócenie zmodyfikowanych plików do stanu sprzed edycji.
Krok 2:
git pull
aby uzyskać zmodyfikowane wersje. Miejmy nadzieję, że nie otrzyma to żadnych nowych wersji plików, o które się martwisz. Jeśli tak się nie stanie, następny krok będzie przebiegał sprawnie. Jeśli to robi , to masz coś do zrobienia, a będziesz zadowolony zrobiłeś.
Krok 3:
git stash pop
Spowoduje to połączenie zmodyfikowanych wersji, które zachowałeś w kroku 1, z wersjami, które właśnie pobrałeś w kroku 2. Jeśli wszystko pójdzie gładko, wszystko będzie gotowe!
Z drugiej strony, jeśli wystąpiłyby rzeczywiste konflikty między tym, co wyciągnąłeś w kroku 2, a twoimi modyfikacjami (spowodowanymi przez kogoś innego edytującego w międzyczasie), dowiesz się i zostaniesz poproszony o ich rozwiązanie. Zrób to.
W ten sposób wszystko ułoży się znacznie lepiej - prawdopodobnie zachowa zmiany bez Twojej realnej pracy z Twojej strony, ostrzegając Cię o poważnych, poważnych problemach.
git commit
lokalne zmiany przedgit pull
?Możesz najpierw schować lokalne zmiany, a następnie pociągnąć, a następnie wyjąć schowek.
Wszystko, co zastępuje zmiany wprowadzone zdalnie, będzie powodować konflikty, które będziesz musiał rozwiązać ręcznie.
źródło
Więc zatwierdziłeś lokalne zmiany w swoim lokalnym repozytorium. Następnie, aby uzyskać zdalne zmiany w lokalnym repozytorium bez wprowadzania zmian w plikach lokalnych, możesz użyć
git fetch
. W rzeczywistościgit pull
jest to operacja dwuetapowa: nieniszcząca,git fetch
po której następujegit merge
. Zobacz Jaka jest różnica między „git pull” a „git fetch”? więcej dyskusji.Szczegółowy przykład:
Załóżmy, że twoje repozytorium wygląda tak (dokonałeś zmian
test2
:A
origin
repozytorium wygląda tak (ktoś inny popełniłtest1
):W tym momencie git będzie narzekał i poprosi Cię o ściągnięcie najpierw, jeśli spróbujesz wypchnąć swoje
test2
do zdalnego repozytorium. Jeśli chcesz zobaczyć, czym jest test1 bez modyfikowania lokalnego repozytorium, uruchom to:Twoje lokalne repozytorium wyników wyglądałoby tak:
Teraz masz zdalne zmiany w innej gałęzi i zachowujesz nienaruszone pliki lokalne.
Więc co dalej? Możesz zrobić
git merge
, co da taki sam efekt, jakgit pull
(w połączeniu z poprzednimgit fetch
), lub, jak wolałbym, zrobić,git rebase origin/master
aby zastosować swoją zmianęorigin/master
, co daje czystszą historię.źródło