GitHub:如何删除某个用户名下的所有提交记录?

16
当我开始使用这个仓库的时候,我之前没有使用过git,由于我的电子邮件输入错误或其他原因,所有的提交记录在一段时间内都是由用户“unknown”进行的。我在这里找到了一个答案,将所有“unknown”提交记录转换为我的名字,但实际上它只是复制了提交记录并应用了我的名字。所以现在我有很多分散的“unknown”用户提交记录。
因此,我想知道是否有一些命令可以运行来删除所有“unknown”用户的提交记录。
1个回答

19

您需要在您的代码库中使用git filter-branch,并将其强制推送到Github。

以下是官方文档中处理几乎相同情况的示例,其中您想要删除特定用户提交的内容:

git filter-branch --commit-filter '
    if [ "$GIT_AUTHOR_NAME" = "Darl McBribe" ];
    then
            skip_commit "$@";
    else
            git commit-tree "$@";
    fi' HEAD

请注意,这将重写您的历史记录,并可能影响其他使用您存储库的人。Github的一些建议:

处理协作者

您可能有协作者拉取了您有问题的分支并创建了自己的分支。在他们获取您的新分支后,他们需要在自己的分支上使用git rebase将它们重新基于新分支。协作者还应确保其分支不会重新引入该文件,因为这将覆盖.gitignore文件。确保您的协作者使用rebase而不是merge,否则他将重新引入该文件和整个有问题的历史记录...并可能遇到一些合并冲突。

http://help.github.com/remove-sensitive-data/


我知道这是旧的,但是函数skip_commit确实缺失了。它在官方文档中有提到,链接为https://git-scm.com/docs/git-filter-branch#_examples。 - jv-k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接