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.name
ve 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 HEAD
ile sizin arasında birleştirme taahhütleri varsa <some HEAD before all your bad commits>
, git rebase
bunları 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 rebase
birleş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 -p
bayrağı kullanmaktır git rebase
. Manpage, kullanımı ve sorunlara yol açabileceği git rebase
konusunda uyarır , ancak-p
-i
BUGS
"Taahhütlerin düzenlenmesi ve taahhüt mesajlarının yeniden düzenlenmesi işe yaramalıdır."
-p
Yukarıdaki komuta ekledim . En son taahhüdü değiştirdiğiniz durumda, bu bir sorun değildir.