【发布时间】:2015-02-25 21:07:53
【问题描述】:
我使用错误邮件地址的源代码树进行了几次提交(未推送)。
为了纠正这个错误,我做了一些研究,发现这个脚本可以用一个好的邮件来编辑提交。 问题是,当我第一次从 git 中提取项目时,已经有多个用户提交了 200 多次。
当我使用该脚本时,它会正确还原我的邮件地址,但其他邮件地址已被销毁:
ex : a.my@mail.com became a.my@5030863e-2e11-0d4c-b7c1-a084646f5798
你知道我该如何解决这个问题吗?
#!/bin/sh
git filter-branch -f --env-filter '
OLD_EMAIL="a.bbbb@5030863e-2e11-0d4c-b7c1-a084646f5798"
CORRECT_NAME="a.bbbb"
CORRECT_EMAIL="a.bbbb@mail.com"
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
EDIT1:
我已经在其他邮件地址上使用过该脚本
它纠正了以前的一切,但 sourcetree 告诉我 master 是 248up/248down :
我怎样才能摆脱这种状态?
EDIT2:
按照建议使用
git branch -f master origin/master
它更正了 repo 的状态(248up/248down 消失了)
但我在 sourcetree 中仍然有 2 倍的历史记录,紫色我们可以看到远程仓库中的最后一次提交(我修改了错误的邮件),从蓝色部分开始有正确的历史记录,最后是我的本地提交(通过良好的邮件开发分支和功能):
【问题讨论】:
-
上面的脚本改变了每次提交的作者信息?您可以使用修订选择器限制
filter-branch操作的引用。也许你应该这样做? -
@Schwern 是的,我在这篇文章中找到了这个脚本,但是你可以看到它引发了一个问题。我的问题是从现在开始我能做什么(现在只有我的电子邮件地址是好的)
-
@EtanReisner 是的,我不明白为什么。我不太擅长 sbash ^^
-
所有之前的提交还是你之前的所有提交?前者没有意义。后者确实如此(并且应该可以通过在
filter-branch调用上更具体地指定要重写的修订来修复)。 -
@EtanReisner 是的,好的解决方案是只编辑我的提交。但正如我所说,我不擅长使用 bash(并且使用 git,我是初学者)。现在我必须通过邮件地址重新编辑提交以恢复好的提交。但我担心脚本会再次破坏提交。有什么想法吗?
标签: git bash email atlassian-sourcetree git-flow