妙用Git rebase和filter-branch

Rain2021-4-29 15:52:06noteGit

git rebase 的操作就如同灭霸的响指一般,能够改变仓库的历史,常用来合并提交信息,让工作树尽可能可以变得整洁。

更改历史提交时间

git rebase --committer-date-is-author-date
# 或者利用 filter-branch
git filter-branch --env-filter 'GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE; export GIT_COMMITTER_DATE'

更改历史提交作者

修改提交作者(交互式)

思路: 变基到要修改的commit的前一个commit,修改后提交,继续变基.

git rebase -i commitID
git commit --amend --author="Author Name <email@address.com>"
git rebase --continue

脚本批量修改

查找条件为OLD_EMAIL,替换相应的提交作者,邮箱,可以更改相应参数的查询条件

git filter-branch -f --env-filter '
OLD_EMAIL="emample@email.com"
CORRECT_NAME="Your New Name"
CORRECT_EMAIL="emample@email.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
Last Updated 4/4/2022, 11:33:25 AM