Git: yalnızca önceki taahhütlerin mesajlarını düzenle


12

Tembel nedenlerden dolayı, varsayılan mesajlarla bir sürü taahhütte bulundum ve şimdi hantal hale geldi, çünkü her bir taahhütte ne değiştirdiğimi gerçekten bilmiyorum.

Yalnızca önceki taahhütlerin mesajlarını nasıl düzenleyebilir ve (mümkünse) taahhüt ağacını nasıl saklayabilirim?


10
Değişen kamu geçmişine dikkat edin!
D. Ben Knoble

2
korkarım ki buradaki cevaplar size neredeyse yeterince uyarı vermiyor. Bu olacak başkasının bu arada geçmişinizi çekti eğer büyük bir karışıklık yaratmak - Tüm daha onlar bunun üstüne yeni işi işledim eğer!
Eevee

Nedeni ile kullanacağım, burada daha basit bir durum var, bu repoyu kullanan tek kişi benim.
Tuyen Pham

3
Bilgi: Bu, Stack Overflow'da zaten sorulmuştur (muhtemelen birçok kez) .
user202729

Yanıtlar:


20

Bir dizi taahhüdün taahhüt mesajlarını düzenlemek için,

git rebase -i firstsha

Burada firstsha, düzenlemek istediğim ilk taahhüdün üst taahhüdü için bir tanımlayıcıdır. (Burada geçerli herhangi bir referans kullanabilirsiniz, bu nedenle git rebase -i HEAD~4son dört taahhüdü gösterecektir.)

Açılan düzenleyicide, tüm "seçim" girdilerini değiştirmek istediğiniz taahhütlerde "geri sar" olarak değiştirin, ardından düzenleyiciyi kapatın; daha sonra seçtiğiniz tüm taahhütler için taahhüt mesajları girmeniz istenecektir.

Bunun taahhüt ağacını değiştireceğini unutmayın , çünkü taahhütlerin karmaları değişecektir. Yeni ağacınızı zorla itmeniz veya yeni bir şubeye itmeniz gerekecek. Ayrıca birleştirme işlemlerini bozar, bu nedenle birleştirme işlemlerini düzenlemekten kaçının.

Yalnızca son taahhüdü hızlı bir şekilde düzenlemek için,

git commit --amend

(ama olsa taahhüt için sahnelenen bir şey sakının).


İşlem ağacını nasıl etkiler, işlem ağacında bir ara dikey çizgi oluşturur mu? Şu anda yalnızca bir dikey satır taahhüt ağacım vardı ve 100'den fazla mesajın değiştirilmesi gerekiyor.
Tuyen Pham

3
Taahhüt ağacınızda yeni bir “çizgi” oluşturmaz, tüm taahhütleri değiştirir. Geçmişiniz şu anda doğrusalysa, doğrusal kalacaktır.
Stephen Kitt

Değişir. Tek başına mı kullanıyorsunuz ve bir sunucuya zorlamıyor musunuz? Sonra hayır, sadece bir "çizgi". Ama aksi takdirde iki tane olabilir ve ilk ikisine verdiğiniz cevaplara dayanarak eski “çizgiden” kurtulmanıza yardımcı olabiliriz.
Kaptan Adam

1
Rebase'in birleştirmeleri işlemek için bir bayrağı var (sanırım preserve-merges)
D. Ben Knoble

6

Aradığın şey git rebase.

Yalnızca önceki git commitmesajı değiştirmek isterseniz, yalnızca aşağıdakileri kullanmanız gerekir:

git commit --amend

Ve önceki taahhütte istediğiniz değişiklikleri yapın ve düzenlemeleri kaydedin.

Ancak daha eski taahhütleri değiştirmeniz gerekirse kullanmanız gerekir rebase.

git rebase -i HEAD~N 

burada N, geri dönmek istediğiniz taahhütlerin sayısına eşittir, örneğin 2 veya 12 veya 6 vb.

Burada taahhütlerinizle birlikte bir metin editörü almalısınız. Seçeneğini değiştirme pickiçin rewordmesajı değiştirmek için.

Değiştirmek istediğiniz tüm taahhütleri belirledikten ve seçeneklerini uygun şekilde değiştirdikten sonra, editörü kaydedin ve kapatın. Ardından, her taahhüt mesajında ​​değişiklik yapın. Memnun kaldığınızda şunları çalıştırabilirsiniz:

git push --force

İsterseniz gerekli değişiklikleri yaptığınız için git geçmişinizi farklı karma değerlerle de olsa korumuş olmalısınız. İşte kontrol etmeniz gereken bazı ek bağlantılar:

7.6 Git Araçları - Yeniden Yazma Geçmişi
GitHub Yardım - Bir İleti İletisini Değiştirme
StackOverflow - Eski işlem iletilerini değiştirme hakkında soru


“Yeniden çevirirseniz”, bir commit --amendşekilde işleyiş sürecini bozmadığınız sürece “ ” yapmanıza gerek yoktur .
Stephen Kitt

Ben Yayınınızdan benim anlayışıma olarak yapacağım o sayesinde, burada adımlar: 1. do git rebase -i firstshao firstshaben mesajı değiştirmek istemezsiniz taahhüt ana düzenleyici, değişiklik o zaman, karma işlemek olduğu pickiçin reword, enterdaha sonra yeni bir mesaj, konu git rebase --continueve yap git push --force?
Tuyen Pham

@StephenKitt, cevabını yeni farkettim, sizinkini gönderirken benimkini yapıyordum. Tavsiyenizi takip edeceğim ve bu düzenlemeleri yapmaya çalışacağım. Eğer daha uygunsa, bu soruya çok benzer cevaplara sahip olmaktan daha iyi olacağını düşünüyorsanız, cevabınızı kendi bağlantılarınızı ekleyerek sizinkine birleştirebilirim.
kemotep

@TuyenPham sadece git rebase -i HEAD~NN geri gitmek istediğiniz taahhütlerin sayısı ile yapmanız gerekir . Her Düzenlemeye gelen mesajını istediğiniz seçeneği işlemek değiştirme pickiçin reword, bu dosyayı kaydetmektedir dosyaları işlemek ve bu tasarruf olanların her değişiklik yapmak. İşiniz bittiğinden emin olduğunuzda sadece ihtiyacınız vardır git push --force [Name of git branch you are were working on]. Her zaman geri dönüp bunu tekrar yapabilir veya aşamalı olarak yapabilirsiniz.
kemotep
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.