2016-01-25 9 views
7

"Git çekme" işlemi yapılırken, üzerine yazmak istediği bir dosyanın bağlantısını kaldıramadığından, işlemi iptal etti çünkü bu dosyaları kilitleyen bir uygulamayı kapatmayı unuttum. Uygulamayı kapatıp reexecute "git çekme" ve aşağıdaki hata iletisini almaya çalıştığınızdaGit çekme sırasında dosyanın bağlantısını kaldıramadı - tutarsız depo durumundan nasıl çıkarım?

:

"Error: Your local changes to the following files would be overwritten by merge: ..." 

ve

Açıkça
"Error: The following untracked working tree files would be overwritten by merge: ..." 

, git sadece bir rulo yapmadan çekme iptal -back ve şimdi çektiği değişiklikleri yerel değişimlerim olarak görüyor.

Bu eyaletten nasıl çıkarım? Çok fazla dosyadan bahsediyoruz ve bir "git revert" yapmadan önce, tarafımdan bazı yerel değişiklikler olsaydı, her dosya için manuel olarak kontrol etmem gerekiyordu.

Not: dağıtılmış geliştiricilerin "çekme" ve "&" işlevlerini sık sık merkezi bir bitbucket deposuna ilettiği istemci-sunucu benzeri bir kurulumda git'i kullanıyoruz.

+0

Hm, birisi bu soruyu yanıtladı (25 Ocak) ve şimdi cevap gitti mi? Stash kullanarak önerilen çözüm oldu -> çekilemez değil mi? – Stiefel

+1

Peki ya git birleştirme - işte? – Vorac

+0

Kabul edilebilir bir çözüm buldum (aşağıdaki cevaba bakın) ancak daha iyi çözümler için açık. Ayrıca: Bu hatayı bir böcek olarak düşünür müsün? – Stiefel

cevap

3

Yukarıdaki yöntemlerin hiçbiri benim için işe yaramadığından, tam otomatik olmayan bir yordam kullandım, ancak el ile seçilen birkaç dosya için harcadım (50 durum yerine 2 durumum).

git stash save --all    

Sonra çekme yinelemek kullanarak (izlenmeyen ve göz ardı dahil)

İlk zulası tüm dosyalar, daha önce, basitçe tüm dosyaların üzerine saklamak gelen

git pull       

Şimdi ödeme kullanarak, başarısız olduğunu Şimdi

git checkout stash -- .   

: ilk çekme (hiçbir birleştirme girişimi) sırasında değiştirildi bir sorun kaldı: başarısız çekiş ve ikinci çekiş arasındaki sunucuda yapılan değişiklikler şimdi üzerine yazılır. Ancak bunlar sadece birkaç dosya olmalı (eğer iki 'çekme' arasındaki süre kısaydıysa) ve kendiniz yaptığınız çalışma değişiklikleri listesinde daha kolay tanımlanabilir. Son işlemi yapmadan önce basitçe "geri döndürün" (Kaplumbağa GIT işlemi iletişim kutusunu kullandım).

git commit 
git stash drop 
0

git reset --merge 
git fetch --all 
git reset --hard origin/master 

deneyin VEYA bazı başka dal üzerinde ise

git reset --hard origin/your_branch 

Açıklama:

git fetch birleştirme ya da bir şey rebase çalışırken olmadan uzak gelen son indirir.

Ardından, git reset, ana dalı, yeni getirdiğiniz şeye sıfırlar. --hard seçenek kökeni/ustası dosyaları maç için çalışma ağacındaki tüm dosyaları değiştirir O sıfırlamadan önce master bir şube oluşturarak geçerli yerel kaydedilmesini sağlamak mümkün olduğunu belirtmek gerekir

:

git checkout master 
git branch new-branch-to-save-current-commits 
git fetch --all 
git reset --hard origin/master 
+0

İlk üç komutu denedim - ve yerel (uncommited) değişikliklerim gitti. – Stiefel

2
git reset --hard 

sıfırlayacak tüm taahhüt durumuna dosyaları izledik.

git clean -df 

kalan tüm izlenmeyen, unignored dosyaları temizler.

Ardından çekmeyi yeniden yapabilirsiniz. Düz birleştirme yapacağız, zaten almayı yaptınız.

Davranışın, Windows'un dosyaların çalışmasını istediği bir farktan kaynaklandığından eminim. Unix-arazisinde, bir dosya açtıktan sonra dizin girişi serbest bırakılır. Gördüğünüz hata sadece Unix sisteminde gerçekleşmez; Açık dosya, bir sürece açık kaldığı sürece geçici hale gelecektir. Unix yolunda da olumsuzluklar var, Windows yolunun bir dezavantajını görüyorsun. Çözümün yeterince kolay, sıfırlama ve temizleme, şantiye temizleme ekibinizdir. Bu onurlu bir iş, onları tanımak, onların eşyalarını biliyorlar.

+0

Fakat "git reset --hard" işlevini kullanarak tüm yerel rahatsızlıklarımı değiştiririm, değil mi? – Stiefel

+0

Ve git temiz, tüm programlanmamış dosyaları kaldıracaktır. Bu hakkı anladığımda, bu cevap elde etmeye çalıştığım şeyin tam tersidir. – Stiefel

+0

Açıklığa kavuşturmak gerekirse: tüm dosyalarımıza bir taahhütte bulunmadan önce hata yapmamız ve bir "git çekme" yapmamızın kötü bir alışkanlığıdır. – Stiefel