Git: yerel değişiklikler geri alınamıyor (hata: yol… birleştirilmedi)


337

Aşağıdaki ağaç çalışma durumum var

$ git status foo/bar.txt
# On branch master
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       deleted by us:      foo/bar.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Dosya foo/bar.txtvar ve ben tekrar "değişmemiş duruma" almak istiyorum ('svn revert' benzer):

$ git checkout HEAD foo/bar.txt
error: path 'foo/bar.txt' is unmerged
$ git reset HEAD foo/bar.txt
Unstaged changes after reset:
M       foo/bar.txt

Şimdi kafa karıştırıcı oluyor:

$ git status foo/bar.txt
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   foo/bar.txt
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   foo/bar.txt
#

Her iki bölümde aynı dosya, yeni ve değiştirilmiş mi? Ne yapmalıyım?


7
Birisinin bu duruma nasıl girebileceğimizi, neden olduğunu ve çözümün neden işe yaradığını açıklayabilseydim.
Marcos Dione

1
Beni bir birleşme çatışması (stash pop bir birleştirme yapar) bir rebase sonra benim saklamak attı zaman bu duruma var .... Bunu çözmek için, ben bir "ödeme - theirs" yaptı .... görünüşe göre benim değişiklikler hala vardı .... bu kaldırmak için .. Ben tekrar dosyada bir ödeme denedim ... bu yukarıdaki hatayı gördüğümde.
Arindam Roychowdhury

Yanıtlar:


557

Yanlış bir şekilde yaptın. Öncelikle sıfırlamanız, dosyayı kaldırmanız ve ardından yerel değişiklikleri geri almanız için ödeme yapmanız gerekir.

Bunu dene:

$ git reset foo/bar.txt
$ git checkout foo/bar.txt

Teşekkürler; bir cazibe gibi çalıştı! Taahhüt etmek zorunda kaldım ( -a arg ile değil , ilgili değişiklikler zaten sahnelendi) ve sonra normal gibi itebildim / çekebildim.
Patrick

18
Benim için gerekli: <br/> $ git reset - foo / bar.txt <br/> $ git checkout - foo / bar.txt <br/> (Aradaki ekstra "-" uyarısına dikkat edin)
Oca

4
İyi sözdizimi "git reset HEAD file1 file2 ..." sonra "git checkout - file1 file2 ..." dir
Thomas Decaux

1
En çok oy alan cevap temelde "yanlış yapıyorsun" dediğinde her zaman eğlencelidir :)
nathanchere

4
(İşlerin ne olduğuna dair) bir açıklama harika olurdu…
Kissaki

52

Bu benim için mükemmel çalıştı:

$ git reset -- foo/bar.txt
$ git checkout foo/bar.txt

14
git checkout origin/[branch] .
git status

// Sonundaki noktayı (.) Not edin. Ve hepsi iyi olacak


-2
git checkout foo/bar.txt

denedin mi (HEAD anahtar kelimesi olmadan)

Değişikliklerimi genellikle bu şekilde geri alırım.


1
checkoutBir birleştirme ortasında a çalışırken tipik hata : $ git co path/to/file= sonuç => error: path 'path/to/file' is unmerged => yani, ilk çalıştırma:, $ git reset path/to/fileve sonra git checkout path/to/fileçalışması gerekir.
michael

2
HEAD belirtilmezse, daha zayıf bir işlem olan dizinten git check-out işlemi yapılır (içerik kaynağı HEAD yerine dizindir). Dahası, bunun bu durumda hiç bir fark yarattığını düşünmüyorum - belirtilen özel sorunla. Did sen denemek?
Kissaki

-4

Git stash'ı tüm 'kirli' durumların zamansal kullanımı için çok yararlı buluyorum .


4
Yararlı bulursanız, lütfen bu somut durumda nasıl yardımcı olacağına dair bir açıklama yapın. Burada nasıl kullanırdın?
Kissaki
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.