Silinen dosyaları hazırlama


499

Diyelim ki git depomda bir dosya var foo.

Varsayalım ki rm(değil git rm) ile silindi . Sonra git durumu şunu gösterecektir:

Changes not staged for commit:

    deleted: foo

Bu bireysel dosya silme işlemini nasıl aşamalandırabilirim?

Eğer denersem:

git add foo

Diyor ki:

'foo' did not match any files.

2
Bu eski Git sürümlerinde bir sorun muydu? Günümüzde bir gibi görünmüyor, değiştirilmiş dosyalara benzer şekilde çalışıyor.
cst1992

Yanıtlar:


22

Git 2.0.0'dan beri git adddosya silme işlemlerini de gerçekleştirecek.

Git 2.0.0 Dokümanları - git-add

<pathspec>…

İçerik eklenecek dosyalar. Fileglobs (örn. * .C) tüm eşleşen dosyaları eklemek için verilebilir. Ayrıca, dizini bir bütün olarak geçerli durumla eşleştirmek için dizini güncellemek üzere bir dizin adı (örneğin dir / file1 ve dir / file2 eklemek için dizin verilebilir) belirtilebilir (örneğin dir belirtmek yalnızca dir / file1 değiştirilmiş bir dosyayı kaydetmez çalışma ağacına, çalışma ağacına bir dir / file2 dosyası eklenir, ancak çalışma ağacından kaldırılan dir / file3 dosyası da kaldırılır. Git'in eski sürümlerinin kaldırılan dosyaları yoksaymak için kullanıldığını unutmayın; değiştirilmiş veya yeni dosyalar eklemek istiyor ancak kaldırılanları yoksay.


Kabul edilen cevap sorunu çözmez - diğeri Git 2.0.0'dan beri daha hantaldır - bu en iyi yoldur! Benim oyum var
João Antunes

518

git rm fooDosyayı silinmek üzere hazırlamak için kullanın . (Bu, daha önce silinmemişse, dosyayı dosya sisteminden de silecektir. Elbette, daha önce iade edildiği için git'ten geri yüklenebilir.)

Dosya sisteminden silmeden dosyayı silinmek üzere hazırlamak için şunu kullanın: git rm --cached foo


8
Ayrıca, --cachedosyayı yalnızca depodan kaldırmak ve dosya sisteminde dokunulmadan bırakmak için bayrak ekleyebilirsiniz .
Hauleth

Bu işlemi geri alma, yani silinmek üzere dosyanın aşamasını kaldırma işlemi ne olabilir? Mümkün mü?
longda

82
Aslında OP zaten_deleted dosyayı nasıl sahne istedi ve bu tarafından yapılabilir git status | grep 'deleted:' | cut -d':' -f2 | xargs -t -I {} git add -u "{}". Diğer yanıtlar, dosya kaldırma işleminin doğru bir şekilde nasıl aşamalandırılacağını gösteriyor (ancak zaten silinmiş dosyaların nasıl aşamalandırılacağını değil). ps. xargstabanlı komut elle yapmak ancak ne zaman Ubuntu 12.04 üzerinde benim için çalışan git add -u deleted_file.txtişten doens't onu. Benim git 1.7.9.5
Dimitry K

8
@DimitryK: git rmDosya sisteminden zaten silinmiş olsa bile bir dosyayı silmek için mutlu bir şekilde hazırlar . OP'nin başka bir yanıta yaptığı yorumda da belirtildiği gibi, silinmiş olan belirli bir dosyayı sahneye koymak istediler.
Wooble

3
git rmzaten kaldırılmış dosyaları sahne almaz. Bu hatayı atar: fatal: pathspec '~.SLDASM' did not match any files. Kanıtlanmış ekranlar: i.imgur.com/cKNKGGe.png i.imgur.com/1p9JdWF.png . İlk ekran görüntüsü 2 dosyanın silindiğini ve sahnelendiğini açıkça gösteriyor, ikinci ekran görüntüsü yazdığımda git rm "~$Box.SLDASM"bu hatayı verdiğini gösteriyor .
KulaGGin

413

Kullanmak doğru olsa da git rm [FILE], alternatif olarak yapabilirsiniz git add -u.

git-addBelgelere göre :

-u --güncelleme

Dizini, [FILE] ile eşleşen bir girişin olduğu yerde güncelleyin. Bu, dizin girdilerini çalışma ağacıyla eşleşecek şekilde değiştirir ve değiştirir, ancak yeni dosya eklemez.

-U seçeneği kullanıldığında [FILE] belirtilmezse, tüm çalışma ağacındaki tüm izlenen dosyalar güncellenir (Güncellemenin geçerli dizin ve alt dizinleriyle sınırlandırılması için Git'in eski sürümleri).

Bunun üzerine indeks yenilenecek ve dosyalar uygun şekilde sahnelenecektir.


56
Evet git add -A .tüm değişiklikleri ekleyeceğim, özellikle silinen bir dosyayı sahneye koymak istedim.
Andrew Tomazos

25
Bu, değiştirilen tüm dosyaları ekleyecektir; Sadece silinen dosyalar değil.
Foreever

3
Bu doğru. Daha spesifik olarak, silinmiş ya da değiştirilmiş olsun, önceden izlenmiş olan dosyalardaki tüm değişiklikleri aşamalandıracaktır. Bu, birden fazla dosyayı sildiğinizde ve dosyaları ayrı ayrı hazırlamak istemediğinizde yardımcı olur.
Sailesh

9
Yalnızca silinen dosyaları değiştirmenin ve değiştirilmemenin bir yolu var mı? Sadece merak.
Ağustos

11
Ben yaptım git add -u FolderWithDeletedFiles/ve onu, teşekkürler istediğini yaptım
parlamentoyu

158

Manuel olarak silinen tüm dosyaları hazırlamak için şunları kullanabilirsiniz:

git rm $(git ls-files --deleted)

Bu komuta şu şekilde bir takma ad eklemek için şunu git rm-deletedçalıştırın:

git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)'

2
Windows bash konsolunda $ () notasyonu aparently mevcut değil, bu daunknown option `deleted)
Félix Gagnon-Grenier

2
Yolunuzda boşluklar varsa, bunun işe yaradığını sanmıyorum. En azından benim sistemimde değil (zsh ile).
Wil Shipley

3
Benim için mükemmel çalıştı! Tam olarak ihtiyacım olanı yaptım. Burada BÜYÜK takdir!
RedSands

Windows'dafor /F %I in ('git ls-files --deleted') do git add -u %I
EIS

3
boşluklu dosya adları için çalışmaz, gerekirse 'git add -u' işlevini görür.
J-Dizzle

33

hazır silinen tüm dosyaları ekleme

git status -s | grep -E '^ D' | cut -d ' ' -f3 | xargs git add --all

emin olmak için teşekkür ederim

git status

gitmek için iyi olmalısın


5
Bunun çalıştığını doğrulamak. Sanırım burada ders yapmak değil rm <file>, daha ziyadegit rm <file>
DanGordon

1
Bilginize: boşlukların kesilmesi, herhangi bir yolun içinde boşluklar varsa sorunlara neden olur
davis

1
boşluklu dosya adları için çalışmaz, gerekirse 'git add -u' işlevini görür.
J-Dizzle

Benim için mükemmel çalışıyor git version 2.15.2 (Apple Git-101.1).
Kalob Taulien

Linux konsolunda mükemmel çalışıyor!
Ahmed AMMOURI

8

Kullanabilirsiniz

git rm -r --cached -- "path/to/directory"

silinmiş bir dizini yerleştirmek için.



0

powershell'de git 2.x + kullananlar için:

foreach ($filePath in (git ls-files --deleted)) { git add "$filePath" }
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.