git stash değişiklikleri yeni dal için geçerli mi?


349

Ana dal üzerinde çalışıyordum, bazı değişiklikler yaptım ve sonra sakladım. Şimdi ustam HEAD'de.

Ama şimdi bu değişiklikleri almak istiyorum, ancak ana dalın HEAD versiyonundan dallar alan yeni bir şubeye.

Bunu nasıl yaparım ?


Yanıtlar:


506

Standart prosedür çalışmıyor mu?

  • değişiklik yapmak
  • git stash save
  • git branch xxx HEAD
  • git checkout xxx
  • git stash pop

Daha kısa:

  • değişiklik yapmak
  • git stash
  • git checkout -b xxx
  • git stash pop

8
@sfletche Eğer zulayı isimlendirmek istiyorsanız git stash save <name> yapmanız gerekir, aksi takdirde, dediğin gibi, git stash ile aynıdır.
SgtPooki

5
Bu yaklaşımı kullandıktan sonra, önceki şubeye dönerseniz, saklanan değişiklikler geri döndü. Sadece yeni branşta saklanan değişikliklerin yapılması mümkün müdür?
Thomas Higginbotham

Sadece yeni şubeye değişikliklerinizi yapın.
ChrisR

2
@ThomasHigginbotham hiçbir Çalışma Dizini şubeler arasında yaygın değildir ve bir şubeden diğerine geçtiğinizde birinden diğerine kopyalanır. İstediğiniz şeyi "başarmak" için, git stash save "description"daha önce belirtilen komutla faydalı açıklamalar ekleyerek genellikle farklı zuyalar yaparım ; ve sonra ben git clearşube (gerçek çalışma dizinini çöpe atmak için) ve daha sonra git stash apply stash@{my_desired_stash}istenen dalda (buna git checkout <branch>açıkça geçtikten sonra ). Bunun gerçek bir çözüm olmadığını biliyorum, ama git ile yapabileceğiniz en iyisi .
Kamafeather

Ben de bu kesinleşmiş git stash dropben işlediğim bir kez
oddmeter

221

Değişikliklerinizi zaten sakladığınız için tek ihtiyacınız olan bu tek astar:

  • git stash branch <branchname> [<stash>]

Dokümanlardan ( https://www.kernel.org/pub/software/scm/git/docs/git-stash.html ):

Oluşturur ve <adlı yeni şube dışarı kontroller BRANCHNAME <hangi taahhüt başlayarak> zulası > esas olarak yaratıldığı, <kaydedilen değişiklikleri uygular zulası yeni çalışma ağacı ve dizine>. Bu başarılı olursa ve < stash > stash @ {< revision >} biçiminin bir başvurusuysa , < stash > 'ı bırakır . Hiçbir < stash > belirtilmediğinde, en sonuncusu uygulanır.

Git stash save komutunu çalıştırdığınız dal, git stash uygulamasının çakışmalar nedeniyle başarısız olacağı kadar değişmişse bu yararlıdır. Stash, git stash çalıştırıldığı sırada HEAD olan taahhüdün üzerine uygulandığından, çakışma olmadan başlangıçta saklanan durumu geri yükler.


3
Tekli istifler için bu yol. Git en son depolamayı uygulayacağından, yeni dala geçecek ve 1'de depola komutunu uygulayacağından saklam adı referansı gerekli değildir.
sinisterOrange

@RodneyGolpe Bu zula 'usta' için de geçerli gibi görünüyor mu? Ne yapmak istiyorum, 'master', git stash, o zaman 'git stash branch [branchname]' nin stash'ı yeni bir dala uygulayıp bekletmeden master bırakmasını beklerdim?
David Doria

2
@DavidDoria Master'a geri dönmeden önce yeni şubenizde değişiklik yapmanız gerekiyor.
Rodney Golpe

Şimdi bu da ustalaşmak için değişiklikler yaptı ... Gerçekten kayboldum ... belli ki git'i gerçekten anlamıyorum. Yumuşak sıfırlama master sonra uzaktan repo çekerek sonra ben olmak istediğim yerdeyim. Üstat değişikliklerden önce devlette. Yeni şube değişiklikleri elinde tutuyor.
Ekkstein

1

Çalışma alanınızda bazı değişiklikler varsa ve bunları yeni bir dalda saklamak istiyorsanız bu komutu kullanın:

git stash branch branchName

Yapacak:

  1. yeni bir şube
  2. değişiklikleri bu şubeye taşı
  3. ve son stash'ı kaldır (Beğen: git stash pop)
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.