2011-08-26 17 views
8

Genellikle bir dosya için bir dosya kümesinin git add olduğu bir durum var, ancak bu dosyalar üzerinde bir değişiklik yapmak zorundayım. Changed but not updated'daki aynı dosyalar.yalnızca yeniden sahnelenen dosyaları yeniden ekleyelim

Ben git add için Changed but not updated ve Changes to be committed listelerinde mevcut olan dosyaları yürütebilirsiniz bir astar var mı? Yukarıdaki örnek için

markdsievers$git status 
# On branch master 
# 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# modified: src/com/foo/Bar.java 
# modified: src/com/foo/Foo.java 
# 
# 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: src/com/foo/Bar.java 
# modified: src/com/foo/Foo.java 
# modified: src/com/foobar/FooBar.java 

Ben sadece Foo.java ve Bar.java istiyorum ama FooBar.java Changes to be committed: listesine eklenir. dosya adları boşluk içeriyorsa

git add -u $(git status --porcelain | grep ^MM | cut -d ' ' -f 2) 
+0

Git eklentiden başka bir şey mi düşünüyorsun? –

+0

'git add -u 'bir dosya kabuğunu istiyor gibi görünüyor, aksi takdirde' Foobar.java'yı ekleyecektir. Evet, örnek verilmiş örneğimi almak için bir dosya katmanı ekleyebilirim ve bu işe yarayacaktı, ancak değişiklikler, tek bir dosya kalıbının çalışacağı nadiren nadiren gerçekleşir. – markdsievers

cevap

4

Bu bir yoludur. Ayrıca -u kullanışsız olan bu durumda, ancak her ikisi de Changed but not updated ve Changes to be committed listesinde bulunan hiçbir dosya varsa, tüm taranmış dosyaları ekleyecektir. Bunun yerine aşağıdakileri kullanın: Bu, yalnızca yalnızca değiştirilen dosyalar için çalışacaktır.

git add $(git status -z | perl -0ne 'print $1 if $_ =~ /^[MADRC][MD](.*)$/') 

Ama sonuncusu dikkatli olun: Bu silinen dosyalar için çalışmak istiyorsanız, yeniden adlandırılmış veya de kopyalandı eklendi, bunu kullan. Örneğin, dosya dizine eklendiyse ancak silme işlemi yapılmazsa, bu komutu çalıştırmak dosyayı dizin içinde de silerek dosyanın içeriğini kaybetmenize neden olur.

Her ikisinin de yalnızca gitme yanıtınızın kök dizininden çalışacağını unutmayın.

+0

Merhaba, bunun için teşekkürler. --porselen hakkında bilmiyordum. Bunun, gitmesi gereken mantıksız bir özellik olduğunu düşünmüyordum, belki de ayarlaması gereken iş akışım. – markdsievers

+0

Bu benim için pek işe yaramadı ... Modifiye edilmiş ancak henüz düzenlenmemiş dosyaları eklemeyi dener. – Darien

+0

+1! Ancak, yalnızca git kök dizininde çalışır ve bunun yerine 'git status -s' kullanarak herhangi bir dizinde çalışır. – pktangyue

0

kabul cevap çalışmaz:

İlgili konular