6

我最近使用以下命令替换了所有本地提交中的作者、提交者及其电子邮件:

git filter-branch -f --env-filter '
if [ "$GIT_COMMITTER_NAME" = "oldname" ];
then
    GIT_COMMITTER_NAME="newname";
    GIT_COMMITTER_EMAIL="newaddr";
    GIT_AUTHOR_NAME="newname";
    GIT_AUTHOR_EMAIL="newaddr";
fi

if [ "$GIT_AUTHOR_NAME" = "oldname" ];
then
    GIT_COMMITTER_NAME="newname";
    GIT_COMMITTER_EMAIL="newaddr";
    GIT_AUTHOR_NAME="newname";
    GIT_AUTHOR_EMAIL="newaddr";
fi
' -- --all

更新在本地立即可见(例如在我的 SourceTree 环境中)。但是,在将修改后的存储库强制推送到 GitHub 之后……</p>

git push -f origin master

... 两个单独的项目顽固地拒绝更新其提交者和作者:Gemfile.lock 文件和 Views 目录。

另请注意:

  1. 这是我第二次在这个存储库上执行这种操作。我相信我第一次没有遇到这样的问题。

  2. 在存储库中搜索我的旧名称...</p>

    $ find . "<oldname">
    

确实产生了一堆结果,这意味着旧名称仍然潜伏在许多存储库文件中——包括在 GitHub 和本地出现更新的文件。

那么我的问题是:如何更改 GitHub 上两个“顽固”文件的提交者/作者?

4

2 回答 2

5

使用 git filter-branch 后,git 仍然在 refs/original 中保留了 repo 历史的备份副本。这样一来,如果您将过滤器分支弄乱了,您可以在需要时恢复。一旦你确定一切顺利,你可以删除备份的参考:

git update-ref -d refs/original/refs/heads/master

出于某种原因,github 仍然需要额外提交才能反映更改。我将在自述文件中添加空格或其他内容,提交并推送...之后,github会在项目页面上反映正确的作者。

于 2013-06-03T15:26:50.413 回答
0

您使用 GitHub 上的哪个确切视图来确定该行的作者?它可能被缓存了,或者您正在查看特定于旧提交 SHA1 的内容。

您可以通过重新克隆 repo 并检查git blame filename这两个文件来测试它是否有效。如果这显示了正确的作者,那么它就起作用了。

于 2013-03-24T18:58:17.780 回答