Lệnh nhánh bộ lọc của Git rất mạnh, nhưng thật khó sử dụng cho bất kỳ thứ gì không tầm thường, chẳng hạn, nếu bạn có nhiều hơn một tác giả để sửa.
Đây là một thay thế tôi thấy hữu ích, sử dụng tính năng .mailmap được mô tả trong trang quản lý git-shortlog. Điều này cung cấp một cơ chế ánh xạ tác giả mà chúng ta có thể sử dụng với cơ sở định dạng của git log. Chúng ta có thể sử dụng nó để tạo các lệnh để chọn và sửa đổi sửa đổi một chuỗi các cam kết được đặt tên.
Ví dụ: giả sử bạn muốn sửa quyền tác giả trên chi nhánh $ CHI NHÁNH, bắt đầu từ một cam kết $ START.
Bạn cần tạo một tệp .mailmap trong thư mục trên cùng của kho lưu trữ để ánh xạ tên tác giả hiện có thành tên chính xác. Bạn có thể nhận danh sách tên tác giả hiện có với:
git shortlog -se
Bạn cần kết thúc với một tệp .mailmap như thế này (giả sử):
You <you@somewhere.org> cowens@localmachine
You <you@somewhere.org> root@localmachine
Bây giờ bạn có thể sử dụng tính năng định dạng của nhật ký git để tạo các lệnh để viết lại $ BRANCH thành $ BRANCH2.
git checkout -b $BRANCH2 $START
git log --reverse --pretty=format:"cherry-pick %H; commit --amend --author='%aN <%aE>' -C %H" $START..$BRANCH | sh -
Lệnh đầu tiên tạo ra một nhánh trống mới mọc lên từ cam kết $ START. Đối với mỗi cam kết giữa $ START và sau đó là kết thúc $ BRANCH, lệnh thứ hai cherry chọn cam kết ban đầu vào cuối nhánh hiện tại $ BRANCH2 và sửa đổi nó để đặt chính xác cho tác giả.
Điều này cũng thường được áp dụng - hãy đặt cái này trong ~ / .gitconfig:
[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" '
Vì vậy, khi bạn cần sửa các tác giả, bây giờ bạn chỉ cần tạo một .mapfile và làm:
git checkout -b $BRANCH2 $START
git reauthor $START..$BRANCH
Tham chiếu nhánh gốc có thể được gán lại cho cái mới và cái mới bị xóa:
git checkout $BRANCH
git reset --hard $BRANCH2 # be careful with this command
git branch -d $BRANCH2
git
cho các mục đích tương tự như thế này được hỏi tốt hơn về Stack Overflow .