Git'in filtre dalı komutu güçlüdür, ancak önemsiz olmayan herhangi bir şey için kullanmak, örneğin düzeltmek için birden fazla yazıcınız varsa, kullanışsızdır.
İşte git-shortlog kılavuz sayfasında açıklanan .mailmap özelliğini kullanan, faydalı bulduğum bir alternatif. Bu, git log'un biçimlendirme tesisi ile kullanabileceğimiz bir yazar haritalandırma mekanizması sağlar. Adlandırılmış bir komisyon sırasını değiştirmek ve değiştirmek için komutları üretmek için kullanabiliriz.
Örneğin, $ START işleminden başlayarak $ BRANCH şubesindeki yazarlığı düzeltmek istediğinizi varsayalım.
Mevcut yazar adlarını düzeltmek için eşleştiren, deponuzun üst dizininde bir .mailmap dosyası oluşturmanız gerekir. Mevcut yazar isimlerinin listesini aşağıdakilerle yapabilirsiniz:
git shortlog -se
Bunun gibi bir .mailmap dosyası ile bitirmeniz gerekir (sayın):
You <you@somewhere.org> cowens@localmachine
You <you@somewhere.org> root@localmachine
Şimdi $ BRANCH'ı $ BRANCH2 olarak yeniden yazmak için komutları oluşturmak için git logun biçimlendirme özelliğini kullanabilirsiniz.
git checkout -b $BRANCH2 $START
git log --reverse --pretty=format:"cherry-pick %H; commit --amend --author='%aN <%aE>' -C %H" $START..$BRANCH | sh -
İlk komut $ START taahhüdünden filizlenen yeni bir boş dal oluşturur. $ START ile $ BRANCH arasındaki her bir işlem için, ikinci komut kirazı, orijinal şubeyi geçerli olan $ BRANCH2 şubesinin sonuna götürür ve yazarı doğru bir şekilde ayarlamak için değiştirir.
Bu aynı zamanda genel olarak uygulanabilir - bunu ~ / .gitconfig dosyasına koyun:
[alias]
# git reauthor $START..$END
reauthor = !sh -c 'eval `git log --reverse --topo-order --pretty=format:\"git cherry-pick %H && git commit --amend -C %H --author=\\\"%aN <%aE>\\\" && \" $0 ` "echo success" '
Bu yüzden, yazarları düzeltmeniz gerektiğinde, şimdi sadece bir .mapfile oluşturmanız ve yapmanız gerekenler:
git checkout -b $BRANCH2 $START
git reauthor $START..$BRANCH
Orijinal dal referansı yenisine atanabilir ve yenisi silinebilir:
git checkout $BRANCH
git reset --hard $BRANCH2 # be careful with this command
git branch -d $BRANCH2
git
benzer amaçlarla kullanmayla ilgili sorular Stack Overflow'ta daha iyi sorulur .