Chcę zsynchronizować moje lokalne repozytorium ze zdalnym, aby moje lokalne repozytorium stało się w 100% kopią zdalnego - co oznacza, że jeśli niektóre pliki różnią się w tych repozytoriach, zastępujemy lokalne z zdalnymi, a jeśli są pliki w lokalnych repozytoriach, które nie istnieją na pilocie, pliki lokalne zostaną usunięte.
Czy jest inny sposób na osiągnięcie tego niż zrobienie nowego klonu zdalnego repozytorium?
Podobne pytanie jak zsynchronizuj lokalne repozytorium git ze zdalnym w jednym ujęciu odrzucając lokalne zmiany / zatwierdzenia .
git fetch --prune
Odpowiedzi:
źródło
git pull -p
robi to samo - „git pull uruchamia git fetch z podanymi parametrami i wywołuje git merge, aby scalić pobrane nagłówkigit fetch <remote> --prune
na wypadek, gdyby ktoś potrzebował tylko--prune
określonego pilota. na przykład.git fetch upstream --prune
.git fetch origin --prune
zsynchronizować lokalne repozytorium z widelcemupstream
projektuWykonają to następujące kroki:
wtedy bez
-n
To zajmie się wszystkimi lokalnymi zmianami. Teraz zatwierdza ...
i zwróć uwagę na linię taką jak:
Zanotuj teraz liczbę „N”:
i w końcu:
nie powinien pokazywać nic do dodania / zatwierdzenia. Wszystko czyste.
Jednak świeży klon może zrobić to samo (ale jest znacznie wolniejszy).
=== Zaktualizowano ===
Ponieważ moja wiedza na temat gitów nieco się poprawiła w tym czasie, wymyśliłem jeszcze jeden prostszy sposób na zrobienie tego samego. Oto jak (# z wyjaśnieniem). Podczas pracy w oddziale:
Chociaż po tym czasie lokalne zatwierdzenia i zmiany znikną z pola widzenia, w razie potrzeby można odzyskać zatwierdzone zmiany.
źródło
Musisz zrozumieć, że repozytorium Git to nie tylko drzewo katalogów i plików, ale także przechowuje historię tych drzew - które mogą zawierać gałęzie i scalenia.
Podczas pobierania z repozytorium skopiujesz do niego wszystkie lub niektóre gałęzie. Są one następnie w twoim repozytorium jako „zdalne gałęzie śledzenia”, np. Gałęzie o nazwach podobnych
remotes/origin/master
lub podobnych.Pobieranie nowych zatwierdzeń ze zdalnego repozytorium nic nie zmieni w lokalnej kopii roboczej.
Twoja kopia robocza ma zwykle sprawdzone zatwierdzenie, o nazwie
HEAD
. To zatwierdzenie jest zwykle wskazówką jednego z lokalnych oddziałów.Myślę, że chcesz zaktualizować swój oddział lokalny (a może wszystkie oddziały lokalne?) Do odpowiedniego oddziału zdalnego, a następnie sprawdzić najnowszy oddział.
Aby uniknąć konfliktów z kopią roboczą (która może zawierać lokalne zmiany), najpierw czyścisz wszystko, co nie jest wersjonowane (za pomocą
git clean
). Następnie sprawdź lokalną gałąź odpowiadającą gałęzi zdalnej, którą chcesz zaktualizować, i użyj,git reset
aby przełączyć ją na pobraną gałąź zdalną. (git pull
włączy wszystkie aktualizacje zdalnego oddziału do twojego lokalnego, co może zrobić to samo lub utworzyć zatwierdzenie scalania, jeśli masz lokalne zatwierdzenia).(Ale wtedy naprawdę stracisz wszelkie lokalne zmiany - zarówno w kopii roboczej, jak i lokalnych zatwierdzeniach. Upewnij się, że naprawdę tego chcesz - w przeciwnym razie lepiej użyj nowego oddziału, to zapisuje twoje lokalne zatwierdzenia. I użyj,
git stash
aby zapisać zmiany, które nie zostały jeszcze zatwierdzone .)Edycja: Jeśli masz tylko jeden oddział lokalny i śledzisz jeden oddział zdalny, wszystko, co musisz zrobić, to
z katalogu roboczego.
Spowoduje to pobranie bieżącej wersji wszystkich śledzonych gałęzi zdalnych i zaktualizowanie bieżącej gałęzi (i katalogu roboczego) do bieżącej wersji gałęzi zdalnej, którą śledzi.
źródło
git pull
Myślę, że w twoim prostym przypadku powinno wystarczyć. (Zaktualizowałem odpowiedź.)Chcesz robić
To sprawia, że Twoje lokalne repozytorium jest dokładnie takie samo, jak Twoje repozytorium.
Pamiętaj, aby zastąpić origin i master zdalnym i rozgałęzieniem, z którym chcesz synchronizować.
źródło
node_modules
, działa dokładnie tak, jak chcę.Zresetuj i zsynchronizuj lokalne repozytorium ze zdalną gałęzią
Polecenie: Pamiętaj, aby zastąpić origin i master zdalnym i rozgałęzieniem, z którym chcesz synchronizować.
Lub krok po kroku:
Twój oddział lokalny jest teraz dokładną kopią (zatwierdza i wszystko) oddziału zdalnego.
Dane wyjściowe polecenia:
Oto przykład uruchomienia polecenia na lokalnym klonie repozytorium Forge a git.
źródło
(Te informacje pochodzą z podręcznika użytkownika Git )
Uczę się również, więc może nie być to dokładnie odpowiedź na pytanie, ale może komuś pomóc:
git branch -r
)git fetch
. Nie wpłynie to na żadne z was, istniejące, niestandardowe oddziały.git add origin /path/to/repository
)git checkout origin/branch_name
, zastąpi to zmiany w lokalnych oddziałachbranch_name
źródło
Wygląda na to, że chcesz dublować zdalne repozytorium:
To polecenie tworzy samo repozytorium. Jeśli nie chcesz mieć czystego repozytorium, sprawy stają się bardziej skomplikowane.
źródło
Jeśli mówisz o synchronizowaniu rozwidlonego repozytorium, możesz wykonać następujące kroki.
Jak zsynchronizować repozytorium wideł z git
sprawdź swoją obecną gałąź git
git branch
kasa do master, jeśli nie jesteś na master
git checkout master
Pobierz repozytorium nadrzędne, jeśli masz poprawne prawa dostępu
git fetch upstream
Jeśli otrzymujesz błąd poniżej, uruchom
git remote add upstream [email protected]:upstream_clone_repo_url/xyz.git
Teraz uruchom poniższe polecenie.
git fetch upstream
Teraz, jeśli jesteś na master, to połącz upstream / master do master branch
git merge upstream/master
Otóż to!!
Sprawdź za pomocą
git remote
polecenia, bardziej szczegółowogit remote -v
Jeśli mam również uprawnienia zatwierdzania do repozytorium upstream, mogę utworzyć lokalny oddział upstream i wykonać pracę, która przejdzie tam upstream.
źródło
Możesz do tego użyć haków git . Po prostu utwórz hak, który popycha zmienione na inne repo po aktualizacji.
Oczywiście możesz dostać konflikty scalania, więc musisz wymyślić, jak sobie z nimi poradzić.
źródło