2013-06-27 9 views
14

Jest coś, czego nie rozumiem z działaniem GIT pull. Mam repozytorium git foobar z dwoma plikami: o nazwach f1 i f2. Przede wszystkim, ja sklonować ten repo poleceniem:GIT pull: zastąp wersję lokalną wersją zdalną

git clone [email protected]:foobar/foobar.git 

robię jakieś błędne zmiany na obu f1 i f2 plików, dodać je do git indeks a następnie popełnić.

git add -A 
git commit -m 'a test wrong modification' 

Teraz decyduję, że te modyfikacje były błędne i chcę zastąpić moje pliki wersją zdalną. Używam więc polecenia git pull:

git pull 

Already up-to-date. 

GIT odpowiada, że ​​projekt jest już aktualny. Czy ktoś może mi pomóc? Co z tym jest nie tak ? Jak mam zastąpić moją wersję lokalną wersją zdalną? Dzięki, Ben.

Odpowiedz

32
git fetch origin 
git reset --hard origin/master 

Oto dobre wyjaśnienie o git ciągnąć git pull

The git fetch polecenie importuje zobowiązuję się ze zdalnym repozytorium do lokalnego repo. Wynikowe zatwierdzenia są przechowywane jako odległe gałęzie zamiast normalnych lokalnych oddziałów, z którymi pracowaliśmy. Daje to szansę przejrzenia zmian przed ich zintegrowaniem z kopią projektu.

Komenda git pull <remote> pobiera kopię określonego bieżącej gałęzi i natychmiast łączy ją z lokalną kopią. Jest to to samo, co git fetch <remote>, a następnie git merge origin/<current-branch>. Ponieważ to się robi, twoje zobowiązania nadal tam były.

Po wykonaniu fetch można zresetować kopię roboczą za pomocą polecenia resetowania. Hard należy zignorować wszelkie zmiany w lokalnej kopii. git reset --hard origin/master

+3

Masz rację (chociaż pierwsza nie jest konieczna, jeśli wszystkie zmiany są już dostępne lokalnie), ale prawdopodobnie pomoże OP, jeśli wyjaśnisz, co te polecenia robią. – hvd

+1

dodano wyjaśnienie problemu – Tala

+0

Co zrobić, jeśli chcemy zastąpić konkretny plik nie wszystko z orgin/master? –

3

Ciągnięcie jest głównie do łączenia pilota zdalnego repozytorium z lokalnym jeden. Krótka odpowiedź brzmi: nic nie jest nie tak z twoją konfiguracją git, ponieważ twoje ostatnie zmiany zdalne już tam są w twoim lokalnym repozytorium. Jeśli ktoś inny przesyła zmiany do zdalnego repozytorium, to znaczy, że przydaje się poręczenie. Zmiany te zostaną pobrane i scalone z lokalnym repozytorium po wykonaniu polecenia pull.