2010-11-11 20 views

Odpowiedz

502

Jeśli masz na myśli chcesz przyciąganie nadpisać lokalne zmiany, robi scalanie jakby drzewo pracy były czyste, dobrze oczyścić drzewo robocza:

git reset --hard 
git pull 

Jeśli istnieją Nieśledzone pliki lokalne można użyć git clean, aby je usunąć. Użyj pliku git clean -f, aby usunąć niepotwierdzone pliki, -df, aby usunąć niepotwierdzone pliki i katalogi, oraz -xdf, aby usunąć niepotwierdzone lub zignorowane pliki lub katalogi.

Jeśli z drugiej strony chcesz zachować lokalne modyfikacje w jakiś sposób byłoby użyć zapas, aby ukryć je przed ciągnięcie, następnie ponownie je potem:

git stash 
git pull 
git stash pop 

Nie sądzę, to sprawia, że ​​każdy W sensie dosłownym: Ignoruj ​​jednak zmiany - połowa przeciągania jest scalana i musi scalić zatwierdzone wersje zawartości z wersjami, które pobrały.

+3

Jeśli po "git reset" twoje pliki nadal różnią się od pilota, przeczytaj http://stackoverflow.com/questions/1257592/removing-files-saying-old-mode-100755-new-mode-100644-z-starto-- zmiany w –

+1

Git to najdziwniejsza rzecz w historii. Reset Git - trudno zrobić. Następnie status git: Twój oddział wyprzedza dwa razy. – shailenTJ

+11

@shailenTJ "Zmiany lokalne" oznaczają tutaj niezatwierdzone zmiany, a nie lokalne zatwierdzenia. 'git reset --hard' wpływa na pierwszy, nie drugi. Jeśli chcesz w pełni zresetować do stanu zdalnego, 'git reset --hard origin/' - ale często iw tym przypadku te dwa znaki, które wyprzedzasz pochodzenie, to praca, którą wykonałeś, a nie coś, co chcesz rzucić z dala. – Cascabel

7

Spójrz na numer , aby umieścić wszystkie zmiany lokalne w "pliku ukrytym" i przywrócić ostatnie zatwierdzenie. W tym momencie możesz zastosować zmiany ukryte lub je odrzucić.

7

Jeśli jesteś na Linuksie:

git fetch 
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done 
git pull 

Pętla for usunie wszystkie pliki, które są śledzone zmienione w lokalnym repo, więc git pull będzie działać bez żadnych problemów.
Najprzyjemniejszą rzeczą jest to, że tylko śledzone pliki zostaną nadpisane przez pliki w repozytorium, wszystkie inne pliki pozostaną nietknięte.

+0

Myślę, że chodziło Ci o "śledzone pliki", co jest dokładnie tym, czego potrzebuję, dziękuję. – Ali

15

Polecenie poniżej nie będzie działać zawsze. Jeśli tak właśnie:

$ git checkout thebranch 
Already on 'thebranch' 
Your branch and 'origin/thebranch' have diverged, 
and have 23 and 7 different commits each, respectively. 

$ git reset --hard 
HEAD is now at b05f611 Here the commit message bla, bla 

$ git pull 
Auto-merging thefile1.c 
CONFLICT (content): Merge conflict in thefile1.c 
Auto-merging README.md 
CONFLICT (content): Merge conflict in README.md 
Automatic merge failed; fix conflicts and then commit the result. 

i tak dalej ...

Aby naprawdę zacząć od nowa, pobierając thebranch i nadpisanie wszystkich zmian, po prostu zrobić:


$ git checkout thebranch 
$ git reset --hard origin/thebranch 

To zadziała dobrze.

$ git checkout thebranch 
Already on 'thebranch' 
Your branch and 'origin/thebranch' have diverged, 
and have 23 and 7 different commits each, respectively. 

$ git reset --hard origin/thebranch 
HEAD is now at 7639058 Here commit message again... 

$ git status 
# On branch thebranch 
nothing to commit (working directory clean) 

$ git checkout thebranch 
Already on 'thebranch' 
+2

TAK. Tego właśnie potrzebowałem, by uzyskać ostateczne podejście "nie podawaj F o tym, co lokalne". Dzięki. :) – Adambean

120

Dla mnie następujące pracował:

(1) Pierwszy pobrać wszystkie zmiany:

$ git fetch --all 

(2) Następnie zresetować Master:

$ git reset --hard origin/master 

(3) Pull/update:

$ git pull 
+5

Sprawdziło się doskonale, gdy miałem dużo problemów z najwyższą odpowiedzią. Dzięki! –

+1

to działa nawet wtedy, gdy wprowadziłeś zmiany lokalne, ale nadal chcesz cofnąć – agsachin

+1

To powinna być najlepsza odpowiedź :) – Purus

0

ten pobierze aktualną gałąź i próbować zrobić szybko naprzód do opanowania:

git fetch && git merge --ff-only origin/master 
4
git fetch --all && git reset --hard origin/master 
Powiązane problemy