1

我正在尝试更改我的 git 提交的作者,因为我忘记更新我的全球电子邮件。我使用下面的代码来更改它(使用我自己的详细信息)。

git filter-branch --env-filter '
OLD_EMAIL="OldEmail"
CORRECT_NAME="new name"
CORRECT_EMAIL="new email" 
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

脚本运行,但随后说:

Ref 'refs/heads/master' was rewritten
Could not rewrite refs/heads/master

我是一个 git 新手,在任何地方都找不到这个错误,这与用户有关吗?我试图通过源代码树运行它是我缺少的东西吗?

谢谢

4

1 回答 1

0

在 Windows 上,您现在有一个更好的选择:

改用它可能的继任者:(newren/git-filter-repo在 Python 中)及其示例部分

cd repo
git filter-repo --mailmap my-mailmap

my-mailmap

Correct Name <correct@email.com> <old@email.com>

这将替换任何人所做的任何提交的作者姓名和电子邮件<old@email.com>

有关映射文件语法的示例,请参阅gitmailmap文档


Could not rewriteGit 2.32(2021 年第 2 季度)已清理了导致“”的另一个可能原因。

请参阅Jeff King ( )的commit 42efa12commit 98fe9e6commit 6d875d1(2021 年 3 月 10 日) 。(由Junio C Hamano 合并 -- --d4bda9b 提交中,2021 年 3 月 22 日)peff
gitster

filter-branch: 删除多祖先警告

签字人:杰夫·金

当一个 ref 映射到一个既不被重写也不被 filter-branch 保留的提交时(例如,因为它被 rev-list 的 pathspec 选择消除了),我们将它重写为它最近的祖先。

6f6826c中的初始提交(“Add git-filter-branch”,2007-06-03,Git v1.5.3-rc0 -- merge)以来,我们已经在映射文件中有多个此类祖先时发出警告。
但是,这些天不可能触发警告代码。
由于a0e4639 (" filter-branch: fix ref rewriting with --subdirectory-filter", 2008-08-12, Git v1.6.1-rc1 -- merge ),我们使用 " " 找到祖先rev-list -1,所以它只能有一个值。

由于我们在映射祖先时附加到映射文件,因此这段代码更加令人困惑。
但是,这永远不会产生多个值,因为:

  • 我们明确检查地图是否已经存在,如果存在,则什么都不做(所以我们的“附加”将始终是一个不存在的文件)
  • 即使我们要尝试两次映射,这样做的过程也是确定性的。
    即,对于给定的sha1,我们总是以相同的祖先结束。
    所以警告它是没有意义的;没有歧义。

因此,将警告代码换成 BUG(我们将在下一次提交中进一步简化)。
让我们停止使用 append 操作符来减少祖先映射代码的混乱。

不再

警告:'$ref' 被重写为多个提交:" 警告:Ref '$ref' 现在指向第一个无法重写 $ref

反而:

致命:BUG:地图文件中有多个祖先?

于 2021-03-27T13:33:56.687 回答