2013-08-06 11 views
6

A şubesinde çalışıyorum ve özellik/görev tamamlanmadı. Daha sonra hızlı bir düzeltme için başka bir şubeye B'a geçmem gerekiyor. Git başka bir şube açmaya çalıştığımda, yerel değişikliklerimı kaydetmek için beni zorlar. Aksi halde tüm yerel değişiklikleri kaybederim.Yerel dalda, değişiklik yapmak istemiyorum, ancak başka bir şubeye geçmeniz gerekiyor

Tamamlanmamış kodumu imzalamam gerekiyor. Herhangi bir kodu işlemek ve kaybetmeden birden fazla şube arasında geçiş yapmamın bir yolu var mı? Yoksa durumu halletmenin daha iyi bir yolu var mı?

+0

olası yinelenen (http://stackoverflow.com/questions/6800778/saving-git-changes-temporarily) –

cevap

9

mipadi demonstrates gibi bir seçenek git stash'u kullanmaktır. will

# While working on "feature" branch, 
# you suddenly need to go work on a hotfix: 
$ git commit --all --message "Backup my feature work" 
$ git checkout -b hotfix master 

# You did your hotfix, and are ready to go back to feature 
$ git checkout feature 
$ git reset head^ 

git reset head^:

bir diğer seçenek, sadece taahhüt dalları geçin ve geri geçiş yapmak, sonra hazır olduğunuzda, önceki geri karışık sıfırlama yapmak, devam eden mevcut işçiliği yapma olduğunu Yedekleme işlemi yapmadan önce karma bir geri alma işlemi yapın ve yedekleme işleminizde yaptığınız tüm değişiklikler, çalışma kopyanıza geri yüklenir. official Linux Kernel documentation for git reset (vurgu mayın) Gönderen:

sıfırlar endeks ancak çalışma ağaç (yani değiştirilen dosyalar korunur ancak taahhüt için işaretlenmemiş) ve güncellenmiş değil neyi bildirir. Bu varsayılan eylemdir.

[Tasarruf Git geçici değiştirir] arasında
+0

+1 Bir 'git stash' herhangi bir dalla ilgisi olmadığı için bunu da öneririm. Yapması gereken git -a -m "duruşması" 'işinizin içeriğini korur. Bu kabul edilen cevap olmalı. – eckes

+0

Stashing bir şube ile ilgili olmayabilir, ancak mevcut HEAD taahhüdüne göre _is_. 'git show -s stash', saklanma işleminin iki ana işlemin bir birleşimi olduğunu gösterir; bunlardan birincisi, stoğun temel aldığı HEAD'tır.Belirli bir mesaj olmadan 'git stash [kaydet]' varsayılan olarak şubenin adını kaydeder. – musiphil

+0

Geçici olarak herhangi bir şey için uğraşmayı tercih ediyorum, çünkü sadece bir 'git stash' komutu hem indeksin hem de çalışan ağacın durumunu saklayabilir. Gönderme, çalışma ağacındaki dizine eklenmeyen değişiklikleri yakalamaz. – musiphil

8

git stash'u kullanarak değişikliklerinizi kaydetmeden yaratmanız gerekir.

Öncelikle saklamak için değişiklikler: Okuduğunuz zaman

$ git checkout branch-B 

orijinal şubenize geri dönüp değişiklikleri unstash:

$ git stash 

Sonra diğer şube geçmek :

$ git checkout branch-A 
$ git stash pop 

Ek kullanım durumları hakkında daha fazla bilgi ve detaylar için yukarıda. Eğer taahhüt görmek ve seyahatseverlerin Git aletleri bu pseudo-kaydedilmesini düzgün anlaşmayı biliyorum aslında yok bu yüzden


Teknik olarak bir taahhüt oluşturmak, ancak git stash bazı sihrini kullanır.

+0

iyi, ne dal-B üzerinde bazı değişiklikler yapmış zaman eğer ve onlara bağlı olmak, şube-A değişimlerimizi taahhüt etmeyecek mi? – Suleman

İlgili konular