Git切换账号的方法--你要的技巧都在这

git config是切换git账号的常规命令,Windows可用'凭据管理器'切换git账号,git Interactive Rebase一般用来修改提交记录。

Git修改/切换账号

当常规命令操作不起作用,而又被本机原有账号搞的焦头烂额时,可以试试修改项目所在的.git\logs目录下的日志记录,手动修改对应分支日志文件中的记录。

.git\logs\HEAD

.git\logs\refs\heads\master

.git\logs\refs\heads\分支名

这只是应急的策略,还是看看以下的常规操作方法吧。

全局范围切换git账号

全局范围内修改git提交者的用户名和电子邮件,运行git config --global选项:

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

项目范围切换git账号

针对项目修改git用户信息运行以下命令:

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

针对单次提交修改git用户信息

仅针对即将到来commit更改作者信息,运行git commit --author选项,可以覆盖下一次提交的作者信息:

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

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

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

Git修改提交者身份的三种方法,只影响之后的提交记录,而不能改变已提记录!当然,不排除通过非常规手段修改用户信息,如:利用编辑器打开git提交日志,手动修改其中的用户名和邮箱。

Windows 修改/切换git账号

windows平台切换git账号,可通过windows的凭证管理器,直接删除或编辑/切换git账号:

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

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

最后两种git操作,在使用前需对它们有清楚的认识。