我正在尝试为我的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新手,在任何地方都找不到这个错误是否与用户有关?我试图通过源代码树运行它是我缺少的东西吗?
由于
答案 0 :(得分:0)
在 Windows 上,您现在有了更好的选择:
git filter-branch
了,is declared (as of Git 2.24, Q4 2019) as somewhat deprecated.改用其可能的后继:newren/git-filter-repo
(在 Python 中)及其 example section:
cd repo
git filter-repo --mailmap my-mailmap
带有my-mailmap
:
Correct Name <correct@email.com> <old@email.com>
这将用 <old@email.com>
有关映射文件语法的示例,请参阅 gitmailmap
documentation。
“Could not rewrite
”的另一个可能原因已通过 Git 2.32(2021 年第 2 季度)解决。
请参阅 commit 42efa12 的 commit 98fe9e6、commit 6d875d1、Jeff King (peff
)(2021 年 3 月 10 日)。
(由 Junio C Hamano -- gitster
-- 于 commit d4bda9b 合并,2021 年 3 月 22 日)
filter-branch
:删除多祖先警告签字人:Jeff King
<块引用>当一个引用映射到一个既没有被过滤分支重写也没有保留的提交时(例如,因为它被 rev-list 的路径规范选择消除了),我们将它重写到它最近的祖先。
自从 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
”,所以它只能有一个值。
由于我们在映射祖先时附加到映射文件这一事实,使这段代码更加混乱。
但是,这永远不会产生多个值,因为:
因此将 BUG 的警告代码换掉(我们将在下一次提交中进一步简化)。
并且让我们停止使用 append 操作符来减少祖先映射代码的混乱。
没有了
<块引用>警告:'$ref' 被重写为多个提交:" 警告:Ref '$ref' 现在指向第一个 无法重写 $ref
相反:
<块引用>致命:BUG:地图文件中有多个祖先?