Sadece tek bir dosya saklamak


177

Sadece değişiklikleri tek bir dosyadan saklamak istiyorum:

git stash save -- just_my_file.txt

Yukarıdaki olsa işe yaramıyor. Alternatif var mı?



için tek dosyasının yerine hokkabazlık zulası komutları çok daha kolay bir yaklaşım kopyalamak için tek bir dosya ve geri getirmek istediğinizde basitçe orijinale kıyasla kopyalayın. Örneğin. cp just_my_file.txt just_my_file.txt.manualstash şimdi tüm check-out ve şeyler yapabilirsiniz ve kopya "izlenmeyen dosya" olduğundan, sorunsuz bir şekilde dallar ve taahhütler arasında hareket edebilirsiniz. Doğru şubede olduğunuzda " tek dosyayı birleştirmek" istediğiniz yeri mv just_my_file.txt.manualstash just_my_file.txtşimdi yapın ve şimdi değişiklikleri gözden geçirebilir ve gerektiğinde uygulayabilirsiniz
Dimitry K

Yanıtlar:


174

Sanırım stash -pmuhtemelen istediğiniz seçimdir, ancak gelecekte başka daha zor şeylerle karşılaşmanız durumunda şunu unutmayın:

Stashgerçekten sadece biraz daha karmaşık branchsetlere çok basit bir alternatif . Stash, işleri hızlı bir şekilde hareket ettirmek için çok yararlıdır, ancak daha fazla baş ağrısı ve çalışma olmadan dallarla daha karmaşık şeyler başarabilirsiniz.

# git checkout -b tmpbranch
# git add the_file
# git commit -m "stashing the_file"
# git checkout master

gidin ve istediğinizi yapın ve daha sonra basitçe rebaseve / veya mergetmpbranch. Gerçekten değil o size zulası sağlayacak daha dikkatli izleme yapmanız gerektiğinde çok ekstra çalışma.


2
Yukarı tarafta, büyük bir acı olmadan zulayı gerçek dallara dönüştürebilirsiniz.
Wes Hardaker

90

Saklı değişikliklerinizle birlikte bir mesaj belirtmek istemiyorsanız, dosya adını çift kısa çizgiden sonra iletin.

$ git stash -- filename.ext

İzlenmemiş / yeni bir dosyaysa, önce onu yerleştirmeniz gerekir.

Ancak, eğer yok , kullanımı ile mesaj belirtmek istiyoruz push.

git stash push -m "describe changes to filename.ext" filename.ext

Her iki yöntem de git sürüm 2.13 + 'da çalışır


1
Değişiklik yapmanın değiştirme Bu cevap bana, en dolaysız görünüyor: git stash -- filename.ext, git commit --amend, git stash pop
Brandon Dewey

1
Bunun çok yeni bazı işlevlere dayanması gerektiğini düşünüyorum. Git 2.1.4'te çalışmaz.
Richard Smith

Bu benim için garip bir davranışla sonuçlanır, zulası saklanır, ancak aynı dosyalar sahnelemeye aynı anda eklenir (git v2.20.1),
paradroid

58

Tek satırları git stash -p(ile benzer şekilde git add -p) etkileşimli olarak saklayabilirsiniz .

Bir dosya adı almaz, ancak dstashed istediğiniz dosyaya ulaşana ve stash tüm değişikliklerle birlikte gelene kadar diğer dosyaları atlayabilirsiniz a.


3
Saklamak istemediğiniz çok fazla dosyanız varsa, bu işlem uzun sürebilir.
jjj

23
bu ne zaman değişti bilmiyorum ama git 2.14.1sizin gibi dosya adını belirtebilirsinizgit stash -p <filename>
muon

21

En iyi seçenek, bu dosya dışında her şeyi sahneye git stash save --keep-indexkoymak ve stash'a dizini tutmasını ve böylece etiketlenmemiş dosyanızı saklamasını söylemektir:

$ git add .
$ git reset thefiletostash
$ git stash save --keep-index

Dan'ın işaret thefiletostashettiği gibi, stash tarafından sıfırlanan tek dosyadır, ancak diğer dosyaları da saklar, bu yüzden tam olarak istediğiniz şey değildir.


2
Bu, dizini aynı durumda tutsa da, dizin içindeki dosyaları da saklamıyor mu? Başka bir deyişle, bunu yaptıktan sonra dizini geçerli şubeye bağlarsanız, başka bir şubeye git stash popgeçip yaparsanız , yalnızca saklamak istediğimiz tek bir dosyayı değil, tüm dosyaları uygulayamaz mı?
Dan Moulding

@DanMoulding: Kesinlikle haklısın, bunu düşünmedim.
CharlesB

16

'Git stash'ı her kullandığınızda' değişiklikleri at 'anlamına gelmeniz durumunda (ve geçici olarak saklamak için git stash'ı gerçekten kullanmıyorsanız), bu durumda

git checkout -- <file>

Git stash'ın dallanma ve bir şeyler yapmanın daha hızlı ve basit bir alternatifi olduğunu unutmayın.


Tüm değişikliklerinizi tek bir dosyada kaldırmak istiyorsanız, bunun en iyi yanıt olduğunu düşünüyorum.
Mohamed Haseel

ve bu belirli görev için en iyi cevap
Zakir hussain

6
Soru yeterince açıktı ve değişiklikleri bir dosyaya nasıl geri döndüreceğini sormadı. Downvoted.
Richard Smith

Bu iyi bir cevap, açıkça bir alternatif olarak gösteriliyor. Ancak bazı insanlar aşağı oyu kötüye kullanma özelliği olarak kullanmak için yeterince inatçı olacak: +1
Mukul Jain

@MukulJain Aslında dosya başına stash'ı çok geçici bir şekilde kullanmam gerekiyordu (temel olarak bir dosya için aynı satırları etkileyen iki değişiklikteki bazı değişiklikleri ayırmak). Aslında alçalmayacağım, sadece benim için işe yaramaz olduğunu belirtin.
Paul Stelian
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.