NOT: Bu cevap SHA1'leri değiştirir, bu yüzden daha önce itilmiş olan bir dalda kullanmaya dikkat edin. Yalnızca bir adın yazımını düzeltmek veya eski bir e-postayı güncellemek istiyorsanız git, bunu geçmişi yeniden yazmadan yapabilirsiniz .mailmap. Diğer cevabımı gör .
Etkileşimli Rebase Kullanımı
Yapabilirsin
git rebase -i -p <some HEAD before all of your bad commits>
Ardından, tüm kötü taahhütlerinizi rebase dosyasında "düzenle" olarak işaretleyin. İlk taahhüdünüzü de değiştirmek istiyorsanız, rebase dosyasında ilk satır olarak manuel olarak eklemeniz gerekir (diğer satırların biçimini izleyin). Sonra git, sizden her taahhütte değişiklik yapmanızı istediğinde,
git commit --amend --author "New Author Name <email@address.com>"
açılan düzenleyiciyi düzenleyin veya kapatın ve ardından
git rebase --continue
Rebase'e devam etmek.
--no-edit
Komutun şu şekilde olması için editörü ekleyerek burada açmayı atlayabilirsiniz :
git commit --amend --author "New Author Name <email@address.com>" --no-edit && \
git rebase --continue
Tek İşlem
Bazı yorumcuların belirttiği gibi, sadece en son taahhüdü değiştirmek istiyorsanız, rebase komutu gerekli değildir. Sadece yap
git commit --amend --author "New Author Name <email@address.com>"
Bu belirtilen isme yazar değişecek, ama committer yapılandırılmış kullanıcıya ayarlanacaktır git config user.nameve git config user.email. Committer'ı belirttiğiniz bir şeye ayarlamak istiyorsanız, bu hem yazarı hem de committer'ı ayarlar:
git -c user.name="New Author Name" -c user.email=email@address.com commit --amend --reset-author
Birleştirme Taahhütleri Hakkında Not
Orijinal yanıtımda hafif bir kusur vardı. Akım HEADile sizin arasında birleştirme taahhütleri varsa <some HEAD before all your bad commits>, git rebasebunları düzleştirir (ve bu arada, GitHub çekme isteklerini kullanırsanız, geçmişinizde bir ton birleştirme taahhütleri olacaktır). Bu genellikle çok farklı bir geçmişe yol açabilir (yinelenen değişiklikler "yeniden temel alınabilir") ve en kötü durumda, git rebasebirleştirme işlemlerinde büyük olasılıkla çözülmüş olan zor birleştirme çakışmalarını çözmenizi isteyebilir. Çözüm, tarihinizin birleştirme yapısını koruyacak -pbayrağı kullanmaktır git rebase. Manpage, kullanımı ve sorunlara yol açabileceği git rebasekonusunda uyarır , ancak-p-iBUGS "Taahhütlerin düzenlenmesi ve taahhüt mesajlarının yeniden düzenlenmesi işe yaramalıdır."
-pYukarıdaki komuta ekledim . En son taahhüdü değiştirdiğiniz durumda, bu bir sorun değildir.