Bunu ele almanın iki yolu vardır. Hangisi daha kolay durumunuza bağlıdır
Sıfırla
Eğer kurtulmak istediğiniz taahhüt son taahhüt ise ve herhangi bir ek iş yapmadıysanız, sadece git-reset
git reset HEAD^
Şubenizi mevcut BAŞKANIZIN hemen öncesine götürür. Ancak, aslında çalışma ağacınızdaki dosyaları değiştirmez. Sonuç olarak, bu işlemde yapılan değişiklikler değiştirilmiş olarak görünür - bu bir 'devre dışı bırak' komutu gibidir. Aslında, bunu yapmak için bir takma adım var.
git config --global alias.uncommit 'reset HEAD^'
O zaman git uncommit
gelecekte sadece bir taahhüdü yedeklemek için kullanabilirsiniz.
Ezici
Bir taahhüdün ezilmesi, iki veya daha fazla taahhüdü bir araya getirmek anlamına gelir. Bunu oldukça sık yapıyorum. Sizin durumunuzda tamamlanmış bir yarı özelliğiniz var ve daha sonra onu bitirip uygun, kalıcı taahhüt mesajı ile tekrar taahhüt edersiniz.
git rebase -i <ref>
Yukarıda söylüyorum, çünkü bunun herhangi bir sayıda komisyon olabileceğini açıkça belirtmek istiyorum. git log
Kurtulmak istediğiniz taahhüdü çalıştırın ve bulun, SHA1'ini kopyalayın ve yerine kullanın <ref>
. Git sizi etkileşimli rebase moduna geçirecektir. Mevcut durumunuz ile yerine koyduğunuz her şey arasındaki tüm taahhütleri gösterecektir <ref>
. Bu yüzden <ref>
10 işlemden önce, size 10 işlemin tümünü gösterecektir.
Her bir taahhüdün önünde kelimesi olacaktır pick
. Eğer kurtulmak ve onu değiştirmek istiyorum taahhüt bul pick
için fixup
ya squash
. Kullanarak, fixup
yalnızca iletiyi yürüten ve değişiklikleri listedeki selefi ile birleştiren atar. squash
Anahtar kelime aynı şeyi yapar, ama yeni kombine taahhüt mesajını işlemek düzenleme olanağı sağlar.
Düzenleyiciden çıktığınızda işlemlerin listede göründükleri sırayla yeniden işleneceğini unutmayın. Bu nedenle, geçici bir taahhütte bulunduysanız, aynı dalda başka işler yaptıysanız ve özelliği daha sonraki bir taahhütte tamamladıysanız, rebase'i kullanmak taahhütleri yeniden sıralamanıza ve ezmenize izin verir.
UYARI:
Yeniden pazarlama geçmişi değiştirir - bunu başka geliştiricilerle paylaştığınız tüm taahhütlere DONT yapmayın.
stashing
Gelecekte, bu sorunu önlemek için, git stash
taahhüt edilmemiş işleri geçici olarak saklamak için kullanmayı düşünün .
git stash save 'some message'
Bu, mevcut değişikliklerinizi saklamak listenizdeki tarafa kaydeder. Yukarıda stash komutunun en açık versiyonu bulunmakta olup, ne sakladığınızı açıklayan bir yorum bulunmaktadır. Ayrıca basitçe çalıştırabilirsiniz git stash
ve başka bir şey yoktur, ancak hiçbir mesaj depolanmaz.
Saklamak listenize göz atabilirsiniz ...
git stash list
Bu size tüm zuhalarınızı, hangi dallarda yapıldıklarını ve her satırın başlangıcını ve mesajını ve stash@{#}
# gibi bir zuvanın tanımlayıcısını gösterecektir.
Bir zulayı geri yüklemek için (hangi zuvanın orijinal olarak yaratıldığına bakılmaksızın herhangi bir dalda yapılabilir) sadece çalıştırın ...
git stash apply stash@{#}
Yine, # yığın dizisinde konum var. Geri yüklemek istediğiniz zift 0
konumdaysa - yani, en son zudaysa. Daha sonra sadece stash konumunu belirtmeden komutu çalıştırabilirsiniz, git sonuncuyu kastettiğinizi varsayar git stash apply
.
Yani, örneğin, kendimi yanlış dalda çalışırken bulursam - aşağıdaki komut dizisini çalıştırabilirim.
git stash
git checkout <correct_branch>
git stash apply
Sizin durumunuzda dallarda biraz daha hareket ettiniz, ancak aynı fikir hala geçerli.
Bu yardımcı olur umarım.
git stash