Yamayı sakladığım şeyle nasıl biçimlendirebilirim


140

Git'te değişikliklerimi saklıyorum. Sakladığım şeyle bir yama oluşturabilir miyim? Ve sonra bu yamayı başka bir depoya (iş arkadaşım) uygular mıyım?

Biliyorum git format-patch -1, ama bence bu benim yaptıklarım için. Ama aynı şeyi saklıyorum değişiklikler için arıyorum.

Ve başka bir depoya nasıl yama ekleyebilirim?

Yanıtlar:


156

Elbette, bunu git stash showdestekler:

git stash show -p

Yani, kullanın

git stash list

yama olarak dışa aktarmak istediğiniz zuvanın sayısını öğrenmek için,

git stash show -p stash@{<number>} > <name>.patch

ihracat için.

Örneğin:

git stash show -p stash@{3} > third_stash.patch

1
Yama uygulamakla ilgili bir sorum var. Diyelim ki yamam birden fazla dosyaya dokunuyor. Yamayı 'etkileşimli' uygulamanın bir yolu var mı? Düzeltme ekinin hangi dosyalarını düzeltme ekini uygulamalıyım? Bunu yapabilir miyim?
silverburgh

1
@silverburgh: Hızlıca baktım man patchve interaktif yama uygulaması için herhangi bir seçenek görmedim. Ancak düzeltme eki dosyaları düz metin dosyaları olduklarından, genellikle bir düzeltme eki, uygulanacak ilgili parçaları kırpmak için bir metin düzenleyicide düzeltmektir patch. Alternatif olarak, yamayı başka bir Git deposuna uyguluyorsanız, hepsini ve ardından git checkoutdeğiştirmek istemediğiniz dosyaları seçerek uygulayabilirsiniz ( git checkoutbir dosya adı ile birlikte değişmemiş değişiklikleri atar).
Greg Hewgill

1
@silverburgh, git uygulamasının "--exclude" ve "--include" parametrelerini kullanarak yamalanmış dosyaları kümesini kısıtlayabilirsiniz.
Kelvin

@silverburgh, yama uyguladığınızı varsayarak aşağıdakileri yapabilirsiniz. yamayı tamamen uygulayın ve sonra yapın git add --interactive ${YOUR_FILES}ve size kısmen taahhüt etme şansı verecektir.
Alex

15
Teşekkürler. Bu benim için çalıştı:git stash show -p stash@{1} > patch.txt
Ryan

63

Bu yanıt, yamayı kaydetmek ve kullanmak istediğiniz yere uygulamak hakkında bilgi sağlar.

Çıktıyı bir dosyada saklamak için:

 git stash show -p --color=never > my-patch-name.patch

Düzeltme ekinin iyi göründüğünü doğrulayın:

git apply --stat my-patch-name.patch

Hata olmadığını doğrulayın:

git apply --check my-patch-name.patch

Yamayı uygulayın

git apply my-patch-name.patch

Bu benim için düz metin kod dosyaları ile çalıştı, ama beyaz boşluk hesaba katmak zorunda kaldı. Düzeltme ekinin iyi göründüğünü doğrulayın: git apply --check --ignore-space-change --ignore-whitespace my-patch-name.patch Düzeltme ekini uygulayın: git apply --ignore-space-change --ignore-whitespace my-patch-name.patch
Craig Boland

Güzel ve özlü bir açıklama. Çalışması için yamayı uygularken repo kökünde olmalıydım, başka git applyfark yoktu.
Maksimum

16

kullanım

$> git stash list
stash@{0}: WIP on master: 84fx31c Merged with change to /public/
stash@{1}: WIP on master: 463yf85 FlupResource: also takes json as a query parameter

son saklanan şeylerin bir listesini almak için. Git aslında saklandığında taahhüt nesneleri oluşturur.

Diğer her şey gibi taahhüt ederler. Onları bir şubede kontrol edebilirsiniz:

$> git checkout -b with_stash stash@{0}

Daha sonra bu şubeyi yayınlayabilirsiniz ve meslektaşınız bu taahhüdü birleştirebilir veya seçebilir.


13

Yukarıdaki çözümler ikili veriler için çalışmaz. Aşağıdakiler bunun için destek ekler:

git stash show stash@{0} -p --binary

Düzenle

Not: Yukarıdaki yanıtlara bir yorum eklemek istedim ancak itibarım yeterli değil.


3

Son zamanlarda Git'in udpateslerinden biri olabileceğine inanıyorum. artık sakladığınız değişiklikleri düzeltmek zorunda değilsiniz. depolanmış değişikliklerinizi bir dalda diğerine uygulayabilirsiniz.

A dalında stash @ {1} olarak adlandırılan bazı değişiklikleri sakladınız.

Şimdi B şubesine geçersiniz.

$git stash apply stash@{1}

bu A dalındaki değişiklikleri B dalına uygular.

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.