我想改变我的名字,姓氏和电子邮件在我的所有提交,这是可能的吗?
除非你没有对世界做出承诺。否则,每个人都有你的旧名字在他们的回购,这是不可能的,你可以改变每个人的。
Use git-filter-branch.
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_NAME和 GIT_COMMITTER_EMAIL变量。
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL
The 标准警告 about rewriting history applies; only do it to history that has not yet been shared.
该手册现在包括一个解决方案,使用 --env-filter,在其例子: https://git-scm.com/docs/git-filter-branch#_examples:
--env-filter
git filter-branch --env-filter ' if test "$GIT_AUTHOR_EMAIL" = "root@localhost" then GIT_AUTHOR_EMAIL=john@example.com fi if test "$GIT_COMMITTER_EMAIL" = "root@localhost" then GIT_COMMITTER_EMAIL=john@example.com fi ' -- --all
如果没有其他作者,你可以这样做:
git filter-branch --commit-filter 'export GIT_AUTHOR_NAME="authorname"; \ export GIT_AUTHOR_EMAIL=mail@example.com; git commit-tree "$@"'
在所有选定的提交中重写 author 和 miter:
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 "$@"'
将下面的脚本保存为例如 ~/.bin/git-replace-author,并使用以下方法运行它,例如:
~/.bin/git-replace-author
git replace-author "John Ssmith" "John Smith" "johnsmith@example.com"
没有参数,它根据 Git 配置更新所有提交的名称,以使用当前的电子邮件地址。
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'
Raw (下载)
与 Git 2.24(Q42019) ,不推荐使用 git filter-branch(和 BFG)。
git filter-branch
The equivalent would be, using newren/git-filter-repo, and its 例子部分:
newren/git-filter-repo
cd repo git filter-repo --mailmap my-mailmap
与 my-mailmap合作:
my-mailmap
Correct Name <correct@email.com> <old@email.com>
这将替换任何人用 <old@email.com>完成的任何提交的作者姓名和电子邮件
<old@email.com>
请参阅 git shortlog映射作者部分了解
git shortlog