我在学校的电脑上写了一个简单的脚本,然后把改动提交给Git(在我的pendrive中的repo中,是从我家里的电脑上克隆的)。经过几次提交,我发现我是以根用户的身份提交的。
有没有办法把这些提交的作者改成我的名字?
改变作者(或提交者)将需要重写所有的历史。 如果你能接受,并且认为值得,那么你应该看看 git filter-branch。 该手册页包括几个例子,可以让你开始使用。 还要注意的是,您可以使用环境变量来改变作者、提交者、日期等的名字。-- 参见 git man page 的 "环境变量" 部分。
具体来说,你可以用这个命令修复所有错误的作者名字和电子邮件,所有分支和标签(来源:GitHub help)。GitHub help)。)
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="[email protected]"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="[email protected]"
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
你也可以这样做。
git filter-branch --commit-filter '
if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
then
GIT_COMMITTER_NAME="<New Name>";
GIT_AUTHOR_NAME="<New Name>";
GIT_COMMITTER_EMAIL="<New Email>";
GIT_AUTHOR_EMAIL="<New Email>";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
注意,如果你是在Windows命令提示符下使用这个命令,那么你需要使用"
而不是'
。
git filter-branch --commit-filter "
if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
then
GIT_COMMITTER_NAME="<New Name>";
GIT_AUTHOR_NAME="<New Name>";
GIT_COMMITTER_EMAIL="<New Email>";
GIT_AUTHOR_EMAIL="<New Email>";
git commit-tree "$@";
else
git commit-tree "$@";
fi" HEAD
一句话,但如果你有一个多用户的版本库要小心 - 这将改变所有提交的作者和提交者的身份(新)。
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='new@email'; GIT_COMMITTER_NAME='Newname'; GIT_COMMITTER_EMAIL='new@email';" HEAD
在字符串中加入断行符(在bash中可以这样做)。
git filter-branch -f --env-filter "
GIT_AUTHOR_NAME='Newname'
GIT_AUTHOR_EMAIL='new@email'
GIT_COMMITTER_NAME='Newname'
GIT_COMMITTER_EMAIL='new@email'
" HEAD