2010-11-11 53 views

cevap

502

Eğer çalışma ağaç temiz olsaydı, iyi, çalışma ağacı temizlemek olarak çekme birleştirme yaparak, yerel değişiklikleri üzerine yazmak istiyor kastediyorsan: izlenmeyen yerel dosyalar varsa

git reset --hard 
git pull 

kullanabilirdin Bunları kaldırmak için git clean. Programlanmamış dosyaları kaldırmak için git clean -f kullanın, untracked dosyaları ve dizinleri kaldırmak için -df ve untracked veya ignored dosyaları veya dizinleri kaldırmak için -xdf kullanın. Bir şekilde yerel değişiklikler tutmak istiyorum diğer yandan ise

, uzakta çekerek önce bunları gizlemek için zulası kullanmayı tercih ediyorum, sonra sonra bunları yeniden başvurun:

git stash 
git pull 
git stash pop 

Ben herhangi yapar sanmıyorum Kelimenin tam anlamıyla anlamı, değişikliklerini göz ardı etse de, çekmenin yarısı birleştirme işlemidir ve içeriğin taahhüt edilen sürümlerini getirilen sürümlerle birleştirmesi gerekir.

+3

Git yeniden ayarladıktan sonra dosyalarınız hala uzaktan kumandadan farklıysa, http://stackoverflow.com/questions/1257592/removing-files-saying-old-mode-100755-new-mode-100644-from-unstaged- adresini okuyabilirsiniz. –

+1

Git'te yapılan değişiklikler, şimdiye kadarki en garip şeydir. Git sıfırla - sıfır. Sonra git durumu: Şubeniz 2 taahhütle devam ediyor. – shailenTJ

+11

@shailenTJ "Yerel değişiklikler" burada yerel taahhütler değil, değiştirilmemiş değişiklikler anlamına gelir. 'sıfırla - sıfır 'eskiyi değil, eskiyi etkiler. Uzaktan kumandayı tam olarak sıfırlamak istiyorsanız, 'git reset --hard menşei/' - ama sık sık bu durumda, bu iki işlemin önceliği var mıdır? Yaptığınız işler, atmak istediğiniz bir şey değil uzakta. – Cascabel

7

Tüm yerel değişikliklerinizi bir "stash dosyası" içine koymak ve son işleme geri dönmek için git stash numaralı bağlantıya bakın. Bu noktada, saklanmış değişikliklerinizi uygulayabilir veya iptal edebilirsiniz.

7

Linux üzerinde ise:

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

yerel repo değiştirilen tüm izlenen dosyaları siler döngü, böylece git pull sorunsuz çalışacaktır.
Bunun en güzel yanı repodaki dosyalar tarafından sadece izlenen dosyaların üzerine yazılacak olmasıdır, diğer tüm dosyalar el değmeden bırakılacaktır.

+0

Sanırım tam olarak ihtiyacım olan "izlenen dosyaları" kastediyorsunuz. – Ali

15

numaralı komut her zaman çalışmaz. Sadece yaparsanız: vb

$ 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. 

ve ...

için gerçekten thebranch indirme ve tüm yerel değişiklikleri üzerine yazarak baştan başlamak, sadece yapın:


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

Bu, çok iyi çalışacaktır.

$ 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

EVET. Nihai bir şey için ihtiyacım olan şey budur. Teşekkürler. :) – Adambean

120

Benim için çalıştı aşağıdaki:

(1) Her şeyden önce değişiklikleri getir:

$ git fetch --all 

(2) Ardından ana sıfırlama:

$ git reset --hard origin/master 

(3) Çek/güncelleştir:

$ git pull 
+5

En iyi cevapla çok fazla sorun yaşandığımda benim için çok çalıştı. Teşekkürler! –

+1

bu bile yerel değişiklikler yaptıktan sonra çalışır, ancak yine de geri dönmek istiyorum – agsachin

+1

Bu en iyi cevap olmalı :) – Purus

0

Bu akım dalı alıp usta hızlı ileri bir yapmaya çalışacaktır: "yok sayar" ile

git fetch && git merge --ff-only origin/master 
4
git fetch --all && git reset --hard origin/master 
İlgili konular