Soru git - stash pop sırasında çakışmaları birleştirdikten sonra hatalar


Orijinal başlık: git - değiştirilmemiş tüm dosyaları güncelle

Şu anda değiştirilmemiş bir git deposundaki tüm dosyaları güncellemeye çalışıyorum. Mesela sana sahip olduğumu söyleyelim:

  • test1.py
  • test2.py

Her iki dosya uzaktan değiştirilirken test1.py yerel olarak değiştirildi. Şimdi denedim:

git stash
git pull
git stash pop

Değişikliklerimi geri yükleyen, birleştirmem gereken bir uyarı verdi test1.py. Çok uzak çok iyi. Sorun aynı işlemi tekrar yapmaya çalıştığımda ortaya çıkar (her iki dosya da tekrar tekrar değiştirildikten sonra). Git şimdi diyor

unmerged (6b126638f7c63aa648609afa60ab972a2403502b)
fatal: git-write-tree: error building trees
Cannot save the current index state

Bu beni üzüyor. Sadece basit bir şey istiyorum: Değiştirmediğim tüm dosyaları güncelle. Daha sonra bir araya geleceğim.


21
2018-05-13 18:56


Menşei


Bir not daha: Git ile, gerçekten işlerinizi bozmazsınız. Çekince, sen alıyorsun herşey Bu dosyaları değiştirip değiştirmediğinizde değişiklikler. Stashed değişikliklerinizi uyguladıktan sonra (pop), değişikliklerin birleşimi ile sonuçlanırsınız (birleştirme yoluyla, perde arkası). Yalnızca değiştirmediğiniz dosyaları güncelleme hedefiniz gerçekten anlamlı değil. - Cascabel


Cevaplar:


Dosyanızdaki çatışmayı çözdünüz (belki? Dipnota bakınız), ancak Git, işinizin bitip bitmediğini bilmiyor. Bu anlaşmazlığı çözmeyi tamamladığınızı belirtmek zorundasınız. (Aksi takdirde, devam etmene izin verdiysen ve gerçekten çözmediysen, kendini ayağa vurmak için her türlü yolu bulabilirsin.)

Bildiğim kadarıyla, bunu yapmanın yolu:

git add <file>        # stage the resolved version, which marks it as resolved
git reset HEAD <file> # unstage the changes, leaving the resolution just in the work tree

Her ikisini de aynı anda yapmanın bir yolu olmalı. update-index ama benim için hızlı bir bakıştan belli değil. (Ama sonra tekrar, gerçek birleşme çatışmaları için, sen asla içeriği hazırlamadan çözülen bir anlaşmazlığı işaretlemek istiyorum; Bu sadece ortaya çıkan sakatlar içindir.)

Ve VonC'nin cevabında söylediği gibi, bu tekrar olsaydı, stash kullanırken ne gibi şeylerin çatışmaları birleştirdiğini kolayca görebilirsiniz. git status. Kırmızı renkte listelenecekler (eğer renkleriniz varsa) ve unmerged (ya da belki deleted by us/them bir silme / değiştirme anlaşması olsaydı).

Dipnot: Sorunuza bir bakınca, anlaşmazlıkları çözüp çözmediğinizi gerçekten söyleyemem. - siz "şimdiye kadar çok iyi" dediniz. Gördüğünüz "uyarı", çatışmaların derhal çözülmesi için bir öneri olarak ifade edildi. Çektiğiniz değişikliklerle çektiğiniz değişiklikleri birleştirmeye çalışırken çatışmalar ortaya çıktı. Bu çatışmayı çözmek ve herhangi bir şekilde ilerlemeden önce iş ağacınızı tutarlı bir duruma getirmeniz gerekir. Bir anlaşmazlığı çözdüğünüz gibi ele alın - dosyaya bakın, çakışma işaretleyicilerini bulun, hangi içeriğin saklanacağını öğrenin! (Ve sonra nasıl bitirileceğine bakın.)


27
2018-05-13 19:08



Cevabını hemen görmedin. Net prosedürün takip edilmesi için +1. - VonC
Bunu takip etmeye çalıştım. Önerilen komutlarınızdan sonra denedim git stash pop yine ama yine de çalışmıyor. Şimdi diyor ki "hata: Aşağıdaki dosyalara yerel değişiklikleriniz birleştirme ile üzerine yazılacaktır: <file>" - Dave Cohen
BenDave Cohen ile aynı problemi yaşadım. Kullanarak çözmek mümkün oldu git checkout -f <file>, hangi (uyarı!) herhangi bir yerel değişiklik atıyor. - James


Bu, ikinci isteklerinizin hala çözülmemiş birleşme nedeniyle işe yaramadığı anlamına geliyor.
Bunu gör So soru aynı hata mesajını bir stada gösterir.

Bu iş parçacığı onaylar bir ağacın birleştirilmiş olmayan dosyaları içeremeyeceği.

Birleştirilmemiş girişleri olan bir ağacınız var.
  Neden konuya bakıp çözmüyorsun?
  Basit "git status"size unperged ne olduğunu göstermeli   girdileri. Bu dosyalara basit bir bakış, çakışma belirteçleri göstermelidir.

Sorunu çöz, taahhüt et, devam et.


2
2018-05-13 19:08