Git'teki çalışma dizinindeki değişiklikleri tutarken Stash değişiklikleri


146

git stashDeğişikliklerinizi saklayan, ancak bunları çalışma dizininde tutan bir komut var mı ? Yani temelde bir git stash; git stash applyadımda?




1
@MariuszPawelski Hayır, pek değil. Bu soru benimkinden daha spesifik. Sorumun cevabı basitçe "hayır" dı. Yine de bağlantı için teşekkürler, daha sonra bazı insanlar, hatta kendim için yararlı olabilir.
Michael Dorst

Açık olmak gerekirse, sorum farklı çünkü dosyaların dokunulmadan kalmasına gerek yok. Sadece alternatifler arıyordum git stash && git stash apply. Bu sorunun cevaplarının benimkinden oldukça farklı olduğunu göreceksiniz.
Michael Dorst

ah, doğru, soru biraz daha az spesifik. Ama ben bu soruyu soruyorum çünkü cevapları da sizin ihtiyacınızı karşılıyor. Bu şekilde, bu soru kenar çubuğunda "Bağlantılı" olarak görünür, bu nedenle birisine yardımcı olabilir.
Mariusz Pawelski

Yanıtlar:


157

Değeri ne olursa olsun, bunu yapmanın başka bir yolu da tutmak istediğiniz değişiklikleri düzenlemek ve her şeyi kullanarak saklamaktır --keep-index:

$ git add modified-file.txt
$ git stash push --keep-index

Yukarıdaki komutlar her şeyi saklar, ancak dosyaları çalışma dizininizde hazırlanır.

Gönderen için resmi Linux Kernel Git belgelerinegit stash veya gelen git-scm :

Eğer --keep-indexseçenek kullanıldığında, zaten dizinine eklenecek tüm değişiklikler bozulmadan kalır.


3
bu gördüğüm --keep-endeksinin açık ara en açık açıklaması. Belgelerde ifade edildiği gibi bir anlam kazanamadım.
40 dedektif

52

git stashve sonra git stash apply( git stash && git stash apply) dosyaları saklar ve sakladıktan hemen sonra saklar. Sonuçta saklı ve çalışma direklerinde değişiklik olacak.

İsterseniz tek parça halinde bir takma ad oluşturabilirsiniz. Sadece şöyle bir şey koy ~/.gitconfig:

[alias]
    sta = "!git stash && git stash apply"

Bu yaklaşımın dezavantajı, tüm dosyaların saklanması ve yeniden oluşturulmasıdır. Bu, söz konusu dosyalardaki zaman damgalarının değiştirileceği anlamına gelir. (Dosyayı yapmadan önce açtığımda kaydetmeye çalıştığımda Emacs'ın şikayet git staetmesine neden oluyor ve kullanıyorsanız makeveya arkadaşlarınızda gereksiz yeniden oluşturmalara neden olabilir .)


1
ayrıca, git stash; git stash applyve arasındaki fark git stash && git stash applynedir?
Michael Dorst


2
@ antropomorfik git config --global alias.sta "!git stash && git stash apply"yapmalı.

Bu diğer adı git stash savebağımsız değişkenle kullanmak için nasıl değiştirebilirim ve sonra yapabilirim git stash apply?
spinningarrow

1
@JaySidri, bang, aslında git komutunun kendisi değil, harici komut olduğu anlamına gelir. Dokümanlara göre : " Anlayacağınız gibi, Git yeni komutu onun yerine takma adınızla değiştirir. Ancak, belki Git alt komutundan ziyade harici bir komut çalıştırmak istersiniz. Bu durumda, komutu bir ! karakteri. "
madhead

10

Cevapta pratikte kullanılması muhtemel olan küçük bir artış.

$ git add modified-file.txt  
(OR $ git add .    ---- for all modified file)
$ git stash save --keep-index "Your Comment"

NOT: "git add" olmadan çalışmaz (örn. Değiştirilmiş ancak taahhüt dosyalarına eklenmemiş)
alex_1948511

4

Size yardımcı olabilecek bir numara var, saklamak değil FWIW:

git add -A
git commit -m "this is what's called stashing"       (create new stash commit)
git tag stash                               (mark the commit with 'stash' tag)
git reset HEAD~        (Now go back to where you've left with your working dir intact)

Ve şimdi emrinizde etiketlenmiş bir saklamak var, git stash popyine de yapmak mümkün değil, ancak yama oluşturmak veya dosyaları sıfırlamak gibi şeyler yapabilirsiniz, oradan çalışma dir dosyalarınız da BTW olarak bırakılmıştır.


3

git stash createBir saklamak taahhüdü oluşturmak için kullanabilir ve ardından şunu kullanarak saklamaya kaydedebilirsiniz git stash store:

git stash store $(git stash create) -m "Stash commit message"

Bu, daha rahat olması için bir git takma adına kaydedilebilir:

git config --global alias.stash-keep '!git stash store $(git stash create)'

git stash-keep -m "Stash commit message"

Bunu yapmak unutmayın herşeyigit stash push yapar. Örneğin, dalın adını taahhüte eklemez, örneğin " stash@{0}: On myBranch: Stash commit message".


1
Bunu sevdim!! Ancak bir düzeltme: taahhüt karmasından önce gelmesi gerektiğini man git-stashsöylüyor -m <message>. Yeni git bir şey hariç.
tanius
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.