Git ile Geçmiş Taahhütlerinizi Değiştirme

Faydalı Alternatif Metin Yazma

Hiç kötü bir taahhüt mesajı içeren bir koda bastınız mı ve zamanda geri dönüp düzenlemeyi dilediniz mi? Belki iki farklı taahhüdü karıştırdınız veya belki de taahhüt mesajınız yeterince açıklayıcı değildi. Her iki durumda da, kötü taahhüt mesajları hiç kimse için iyi değildir – bir taahhüdü ne zaman kontrol etmeniz gerekebileceğini asla bilemezsiniz ve zor bir kod yığını için geçmiş taahhütleri aramak bir kabus olabilir. Gelecekteki benliğiniz bunun için size teşekkür etmeyecek!

Ya bir taahhüt mesajını düzenlemekten daha fazlasını yapmanız gerekiyorsa? Bir işleme yanlışlıkla yanlış dosyayı dahil ettiğim veya bir değişikliği kaçırdığım ve düzeltmek için fazladan bir taahhütte bulunmak zorunda kaldığım birçok zaman var.

Git ile geri dönmenin ve geçmiş taahhütlerimizi düzenlemenin yolları var. Taahhüt mesajını değiştirebilir veya gerekirse dosya ekleyebilir veya kaldırabiliriz. Bunu yapmanın birkaç yoluna bakalım.

Son taahhüdünüzü değiştirme

Değiştirmek istediğiniz taahhüt, yaptığınız en son taahhütse ve taahhüt henüz verilmediyse, değiştirmek çok basittir. Sadece yaz:

git commit --amend

Bunu ile çalıştırırsanız -m flag, taahhüt mesajınızı aynı anda terminalde düzenleyebilirsiniz:

git commit --amend -m "Edited commit message"

Ardından taahhüt mesajınızı düzenleyin, işlemi kaydedin ve kodunuzu depoya gönderin. Bu değişiklikleri yaparak da dosya ekleyebilir veya kaldırabilirsiniz. önceki yürütme değiştirmek emretmek. İşte kodun dosyasını ekliyoruz BENİOKU.md ve dosyayı kaldırma yanlış dosya.mdardından taahhüt mesajını düzenleyin:

git add README.md
git rm wrong-file.md
git commit --amend -m "Edited commit message"

Ayrıca son taahhüdünüzde değişiklikler yapabilirsiniz (dosya ekleme veya kaldırma gibi) olmadan taahhüt mesajını değiştirmek:

git add README.md
git rm bad-file.md
git commit --amend --no-edit

Eski taahhütleri değiştirme

Ama ya taahhüdünüzü zaten zorladıysanız veya birkaç taahhüt geri olsa bile? Neyse ki, geçmiş taahhüt mesajlarınızı düzenlemenin oldukça basit bir yolu var – düzenlemek istediğiniz mesajın hangisi olduğunu bildiğinizi varsayarsak. kullanmamız gerekecek rebase komut – ama önce, onun hakkında biraz anlamaya çalışalım.

Zamanda seyahat

Git’i kullanmak biraz kendi zaman makinemize erişmeye benzer. Farklı taahhütleri kontrol ederek zaman çizelgemizde ileri ve geri hareket edebiliriz. Bir ekipte çalışıyorsak, kendi ayrı zaman çizelgelerinde çalışan birçok insanımız olabilir (Git dalları) ve bazen onların zaman çizelgeleri bizimkiyle birleşebilir (birleştirme), ancak zaman temelde doğrusaldır. Bazı kötü kodlar işlerseniz, her zaman zamanda, gerçekleşmeden önceki zamana geri dönebilirsiniz. Her taahhütte, zaman çizelgesine biraz daha adım eklersiniz – yani bir şeyler ters giderse, yaptığınız tüm o harika işleri kaybetmemiş olursunuz. Oldukça havalı!

Doğrusal Git geçmişi

yeniden temellendirme

Yeniden temellendirme, şubenizin tabanını taşıma işlemidir yukarı akış. Mevcut özellik dalınızı temel aldıysanız, usta şube ve usta şube o zamandan beri diğer katkılar nedeniyle devam etti, o zaman en son değişikliklere sahip olduğunuzdan emin olmak için bir yeniden temel oluşturabilirsiniz. usta Mevcut şubenizde. Sen abilir kullanmak git pull veya git merge, ancak bu, bu değişiklikleri yaptığınız noktada şubenizin geçmişine tek (potansiyel olarak çok büyük) bir taahhüdün eklenmesine neden olur. Yeniden temellendirme ile, ekstra taahhütleri ekliyoruz. usta zaman çizelgemize dalın, bu yüzden baştan beri oradaymış gibi görünüyorlar.

Ana dalın özellik dalıyla birleştirilmesini gösteren çizim
Bir yukarı akış ana dalını özellik dalınızla birleştirmek, özellik dalında büyük bir taahhütle sonuçlanır
Ana öğeden yeniden oluşturulmakta olan özellik dalını gösteren çizim
Yeniden temellendirme, ana daldan yeni taahhütleri dahil etmek için özellik dalınızın tabanını hareket ettirir

Yeniden temellendirme bizim için başka boyutların kapısını açar. Zaman artık lineer değil – yeniden temellendirme bizi çoklu evrenin dünyasına götürüyor. Aslında tarihi değiştirebiliriz. Yani, geri dönebiliriz, bir taahhüdü değiştirebiliriz (veya kaldırabiliriz) ve bu hiç olmamış gibi. Geçmişimiz, bugünümüz ve geleceğimiz hiç var olmamış bir taahhüt gibi olacak. Netflix dizisini izlediyseniz Rus bebek, belki de farklı zaman çizgilerinin paralel olarak nasıl çalışabileceğini görebilirsiniz! Bu büyük ve korkunç süper gücün nasıl faydalı olabileceğine bakalım.

Temiz bir geçmiş tutmak

Olan her şeyin kaydedildiği ve taşa yerleştirildiği doğrusal bir zaman çizelgesine sahip olmanın harika olduğunu düşünebilirsiniz. Ancak temiz bir Git geçmişi tutmanın avantajları vardır. Geriye bakıp bir proje veya özellik üzerinde yapılan iş parçalarını görmeyi çok daha hızlı ve kolay hale getirebilir; bu, bir ekibin kod katkılarını gözden geçiriyorsanız kullanışlıdır. Alakasız taahhütlerde beklemeniz gerekeceğinden, hataları bulmayı ve düzeltmeyi de kolaylaştırabilir.

Zaman çizelgesini düzenleme

bu git rebase komutun iki modu vardır: manuel ve etkileşimli. Geçmiş taahhütlerimizi düzenlemek için bir etkileşimli yeniden temel. Geri gitmemiz gereken kaç taahhüt olduğunu bilmemiz gerekecek ( KAFA, veya geçerli taahhüt). Diyelim ki, düzenlemek istediğimiz son işlemden üçüncüsü. Aşağıdakileri terminalinize yazın:

git rebase -i HEAD~3

Bu, son üç taahhüdün bir listesini getirecektir. Örneğin:

pick cd16d77 Adding .gitignore
pick 67c91dc Adding README.md
pick 1ba6af9 Removing unneccessary imports

Alternatif olarak, taahhüt kimliğini biliyorsanız, bunun yerine şunu hedefleyebilirsiniz:

git rebase -i cd16d77

Her taahhüdün kelimeye sahip olduğunu fark edeceksiniz pick onun yanında. Bunu şu şekilde değiştirmemiz gerekiyor reword. Kullan i tuşu, metni düzenlememize izin verecek olan ekleme modu için bir kısayol olarak. Ardından, taahhüt mesajının asıl metnini bunun yanında değiştirebilirsiniz.

Yalnızca taahhüt mesajını değil, aynı zamanda taahhüdün içeriğini de değiştirmek istiyorsanız, kullanabilirsiniz. edit onun yerine reword. Dahil olmak üzere başka seçenekler de olduğunu fark edeceksiniz. drop bir taahhüdü tamamen kaldırmak için. (Bunların da kısa komutları vardır: d için düşürmek, r için yeniden kelimevb.)

Taahhüdünden memnun olduğun biri, vur kaçmak ekleme modundan çıkmak için yazın :wq Git düzenleyicisinden çıkmak için.

Kötü taahhüdünüzü henüz zorlamadıysanız, daha fazla bir şey yapmamıza gerek yok. Aksi takdirde, zorlamak zorunda kalacağız. Benim gibi Git’ten biraz korkuyorsanız, zorlamak yapabileceğiniz en korkunç şeydir. Git geçmişini yeniden yazıyorsunuz. Ama korkularımızla birlikte yüzleşelim!

İlk olarak, bir uyarı: zorlamak yalnızca kendi dalınızda yapmanız gereken bir şeydir. Push’u paylaşılan bir şubeye zorlarsanız, diğer insanlar için de geçmişi yeniden yazarsınız ve bunu yerel olarak çözmeleri gerekecek ve potansiyel olarak büyük baş ağrılarına neden olacaktır. (Bu yüzden ayrı dallarda çalışmak gerçekten iyi bir fikir!). Başka kimsenin etkilenmeyeceğinden memnunsanız, devam edip koşabilirsiniz:

git push --force

Yeniden temellendirme yapıldığında HEAD otomatik olarak en son işleme sıfırlanacak, bu yüzden işimiz bitti – üzerinde çalışmaya devam etmek için zaten projemizin en güncel sürümüne sahip olacağız.

İşte böyle, tarihi yeniden yazdık ve dünyanın sonu gelmedi! Daha fazlasını öğrenmekle ilgileniyorsanız, Atlassian’da aşağıdakiler de dahil olmak üzere harika öğreticiler var: Bu tarihi yeniden temellendirme ve yeniden yazma hakkında.

Git hakkında daha fazla şey öğrenmeye çalışıyorum ve senin ipuçlarını duymayı çok isterim! Paylaşacak bir şeyiniz varsa, lütfen bana Twitter’da bildirin. @CSSInRealLife.

ben yaptım küçük depo Öğrenirken Git ile oynamak için kullandığım, zamanla eklediğim bir avuç komut ve açıklama da içeriyor. Çatallamaktan ve kendi Git uygulamanız için kullanmaktan çekinmeyin (örn. oyun alanı dizini) veya ekleyecek bazı yararlı şeyleriniz varsa bir çekme isteği oluşturun!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.