"git filter-branch"成功用于更改提交者/作者,但更改不反映在github上

Bor*_*Not 6 git github git-filter-branch

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

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
Run Code Online (Sandbox Code Playgroud)

更新在本地立即显现(例如在我的SourceTree环境中).但是,在将修改后的存储库强制推送到GitHub之后......

git push -f origin master
Run Code Online (Sandbox Code Playgroud)

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

还请注意:

  1. 这是我第二次在此存储库上执行此类操作.我相信我第一次遇到这样的问题.

  2. 在存储库中搜索我的旧名称...

    $ find . "<oldname">
    
    Run Code Online (Sandbox Code Playgroud)

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

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

Ale*_*ris 5

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

git update-ref -d refs/original/refs/heads/master
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它仍然需要额外的提交github来反映变化.我将在自述文件,提交和推送中添加一个空格或内容...之后,github在项目页面上反映了正确的作者.