我可以在以前的所有提交中更改我的姓名吗?

我想在我的所有提交中改变我的名字,姓氏和电子邮件,这可能吗?

使用git-filter-branch

 git filter-branch --commit-filter 'if [ "$GIT_AUTHOR_NAME" = "Josh Lee" ]; then export GIT_AUTHOR_NAME="Hobo Bob"; export GIT_AUTHOR_EMAIL=hobo@example.com; fi; git commit-tree "$@"' 

这只会影响作者,而不是提交者(对于大多数提交者来说,它与作者是一样的)。 如果你想重写这些,设置GIT_COMMITTER_NAMEGIT_COMMITTER_EMAILvariables。

关于重写历史的标准警告适用; 只对历史尚未分享。

要在所有选定的提交中重写作者和提交者:

 git filter-branch --commit-filter \ 'if [ "$GIT_AUTHOR_NAME" = "OldAuthor Name" ]; then \ export GIT_AUTHOR_NAME="Author Name";\ export GIT_AUTHOR_EMAIL=authorEmail@example.com;\ export GIT_COMMITTER_NAME="Commmiter Name";\ export GIT_COMMITTER_EMAIL=commiterEmail@example.com;\ fi;\ git commit-tree "$@"' 

如果没有其他作者,你可以这样做:

 git filter-branch --commit-filter 'export GIT_AUTHOR_NAME="authorname"; \ export GIT_AUTHOR_EMAIL=mail@example.com; git commit-tree "$@"' 

保存下面的脚本,例如~/.bin/git-replace-author并运行它,例如:

 git replace-author "John Ssmith" "John Smith" "johnsmith@example.com" 

没有参数,它会根据Gitconfiguration更新所有提交您的名字的使用您的当前电子邮件地址。

 DEFAULT_NAME="$(git config user.name)" DEFAULT_EMAIL="$(git config user.email)" export OLD_NAME="${1:-$DEFAULT_NAME}" export NEW_NAME="${2:-$DEFAULT_NAME}" export NEW_EMAIL="${3:-$DEFAULT_EMAIL}" echo "Old:" $OLD_NAME "<*>" echo "New:" "$NEW_NAME <$NEW_EMAIL>" echo "To undo, use: git reset $(git rev-parse HEAD)" git filter-branch --env-filter \ 'if [ "$GIT_AUTHOR_NAME" = "${OLD_NAME}" ]; then export GIT_AUTHOR_NAME="${NEW_NAME}" export GIT_AUTHOR_EMAIL="${NEW_EMAIL}" export GIT_COMMITTER_NAME="${NEW_NAME}" export GIT_COMMITTER_EMAIL="${NEW_EMAIL}" fi' 

原始 (下载)

只有当你没有把你的承诺推向世界。 其他每个人都有他们的回购你的旧名,这是不可能的,你可以改变每个人的。