Belirli bir dosyayı nasıl saklayabilirim?


1624

Şu anda değiştirilmiş olanları kaydetmek üzere olduğum zuladan bırakarak belirli bir dosyayı nasıl saklayabilirim?

Örneğin, git durumu bana şunu veriyorsa:

younker % gst      
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   app/controllers/cart_controller.php
#   modified:   app/views/cart/welcome.thtml
#
no changes added to commit (use "git add" and/or "git commit -a")

ve sadece app / views / cart / welcome.thtml saklamak istiyorum, bunu nasıl yaparım? Gibi bir şey (ama elbette bu çalışmıyor):

git stash save welcome_cart app/views/cart/welcome.thtml

56
"Olası yinelenen" sorunun şu anda yanlış yanıtı kabul edildi olarak işaretlenmiş.
Penguin Brian

6
onu kullanabilir git checkout -- filenameve orijinal durumuna geri döndürebilirsiniz.
visualex

7
@visualex gerçekten onu geri döndürecek, ancak saklamayacak
Jesper

2
Re Penguin Brian'ın yorumu: Evet, git'in son sürümleri için bu soruya "olası yinelenen" soruya verilen kabul edilen yanıt.
Mars

1
$ git stash - filename.ext
Linielson

Yanıtlar:


2468

DÜZENLEME: Git 2.13 beri stash için belirli bir yolunu kaydetmek için bir komut vardır: git stash push <path>. Örneğin:

git stash push -m welcome_cart app/views/cart/welcome.thtml

ESKİ CEVAP:

Bunu git stash --patch(veya git stash -p) kullanarak yapabilirsiniz - değiştirilen her bir iri parça ile size sunulacak etkileşimli moda gireceksiniz. Kullanım nEğer saklamak için istemiyorum dosyaları atlamak için ysize saklamak istediğiniz birini karşılaştıklarında ve qçıkın ve unstashed kalan hunks bırakmak. agösterilen iri parça ve diğer iri yarıları o dosyada saklayacaktır.

En kullanıcı dostu yaklaşım değil, ancak gerçekten ihtiyacınız olursa işi hallediyor.


32
Hantal ama işe yarıyor. Keşke yalnızca aşamalı değişiklikleri saklamanın hızlı bir yolu olsaydı ve daha sonra değişikliklerin aşamalı olmayan çalışma ağacına gitmesini sağlasaydık.
James Johnston

54
@JamesJohnston git stash --keep-index, tüm aşamalı olmayan değişiklikleri saklamanıza izin verecektir (aradığınız şeyin tam tersi). stackoverflow.com/a/8333163/378253
Nicolas Wormser

121
aBunun yerine söylerseniz , yo iri parçayı + dosyanın geri kalanını saklayacaktır, bu çok daha hızlıdır.
i_am_jorf

53
@jeffamaphone harika! ayrıca dtam tersini de yapacaktır, yani geçerli dosyada daha fazla parça saklamayacaktır. ve gerçekten ?de tüm olası seçenekleri gösterecektir.
omnikron

8
@Vencovsky "Mesaj" anlamına gelir ve zulanın isteğe bağlı açıklamasını belirtmek için kullanılır. Buna ihtiyacınız yoksa -m welcome_cartkısmı dışarıda bırakabilirsiniz .
svick

333

Genellikle saklamak istemediğim indeks değişikliklerini eklerim ve ardından seçenekle saklarım --keep-index.

git add app/controllers/cart_controller.php
git stash --keep-index
git reset

Son adım isteğe bağlıdır, ancak genellikle bunu istersiniz. Dizinden değişiklikleri kaldırır.


Uyarı Yorumlarda belirtildiği gibi, bu hem aşamalı hem de aşamasız olarak her şeyi zulaya koyar. --keep-indexZulası yapıldıktan sonra sadece yalnız endeksi bırakır. Bu, daha sonra zulayı açtığınızda birleştirme çatışmalarına neden olabilir.


5
--Patch seçeneğiyle geçmek istemediğiniz çok fazla değişikliğiniz varsa, bu kabul edilen cevaptan çok daha iyidir.
quux00

181
Hayır, bu hem aşamalı hem de aşamasız olarak her şeyi zulaya koyar. --keep-indexZulası yapıldıktan sonra sadece yalnız endeksi bırakır. Yani bu AFAICT sorusuna geçerli bir cevap değil.
Raman

2
Bunun tersini yapmanın bir çözümü için @ Rachel'ın sorusundaki cevabımı görün (aşamalı olmayan değişiklikler yerine aşamalı değişiklikleri saklamak) - stackoverflow.com/questions/3040833/…
JesusFreke

3
Ardından, sakladığınız dosyaları, eklediğiniz dosyaları kaydetmeden geri almak istiyorsanız, çalıştırabilirsiniz git stash; git stash pop stash@{1}.
yndolok

7
UYARI: @ Raman'ın konusuna dikkat edin. Bu, yapması gerekeni yapmaz. Bu, aynı değişiklikleri zulaya koyacak ve onları çalışma ağacında bırakacaktır. Daha sonra zulayı açmaya çalıştığınızda, büyük olasılıkla birleştirme çatışmaları yaşarsınız ve genellikle gerçekten kafa karıştırıcıdır ve düzeltilmesi zordur.
rjmunro

16

Svick'in cevabına eklemek için, -mseçenek sadece zulanıza bir mesaj ekler ve tamamen isteğe bağlıdır. Böylece komut

git stash push [paths you wish to stash]

tamamen geçerlidir. Örneğin, değişiklikleri src/dizinde saklamak istersem,

git stash push src/
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.