Git切换账号的方法

Git通过命令切换账号很多时候没有效果,明明修改了git账号,提交记录中仍显示旧的账号信息。

git修改账号(切换账号)

在Git中有三种方法修改提交者的身份。这些方法只影响以后的提交记录,而不能改变已提交的记录!当然,这只是从git提供的命令层面,不排除通过其他操作的手段,如:利用编辑器找开git提交日志,手动修改其中的用户名和邮箱。

在全局范围内修改git提交者的用户名和电子邮件,可以在运行“git config”命令时加上--global选项,确保以后所有的提交都使用指定的账号信息:

$ git config --global user.name "John Doe" 
$ git config --global user.email "john@doe.org"

更改单个git仓库提交者名称和电子邮件,只对运行git命令所在的当前git目录有效。

$ git config user.name "John Doe"
$ git config user.email "john@doe.org"

仅针对下一次commit更改作者信息。在运行git commit使用--author选项,可以覆盖下一次提交的作者信息:

git commit --author="John Doe <john@doe.org>"

使用--amend选项对最后一次提交进行修改。

git commit --amend --author="John Doe <john@doe.org>"

Windows修改git账号的方法

以上只是修改用户名与邮箱,如果要在windows平台切换账号,可以通过windows的凭证管理,直接删除或编辑账号。

在 控制面板\所有控制面板项\凭据管理器,如下图所示:

Git切换账号的方法

git Interactive Rebase修改提交记录

如果这些都不能满足需求,可以试试git Interactive Rebase。

Interactive Rebase是Git中瑞士军刀:它可以完成任何事情,这也意味着很容易搬石头砸自己的脚。使用前尽量先了解它。

第一步是选择一个commit 记录(通过git log命令获取),并将commit id传递给rebase命令:

$ git rebase -i -p 0ad14fa5

操作会打开编辑器,要求使用“edit”关键字标记要更改的所有提交。

Git将引导完成每次提交,有机会根据需要进行调整:

Stopped at 5772b4bf2... Add images to about page You can amend the commit now, with 
      git commit --amend 
Once you are satisfied with your changes, run
      git rebase --continue

现在,可以修改作者信息了,然后,继续执行下一个提交对象,直到编辑完刚刚标记的所有提交为止:

$ git commit --amend --author="John Doe <john@doe.org>" --no-edit
$ git rebase --continue

git filter-branch批量修改

另一种方法是使用Git “filter-branch”命令,它允许使用脚本批量处理提交。可以在git仓库中运行以下示例脚本(填写新旧电子邮件和名称):

$ git filter-branch --env-filter '
WRONG_EMAIL="wrong@example.com"
NEW_NAME="New Name Value"
NEW_EMAIL="correct@example.com"

if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$NEW_NAME"
    export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$NEW_NAME"
    export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

使用最后两种方法前一定要想清楚它的影响