从github.com中移除贡献者?

45

你创建了这个代码库吗? - Oluwafemi Sule
4
可能会有人对我大喊大叫,但这是可行的。先克隆一份本地副本,删除 Github 仓库。然后在本地仓库中删除 .git 文件夹。接着在本地初始化一个新的仓库 git init,创建一个新的 Github 仓库,并将你的新本地仓库上传到 Github 上。显然,这样做会移除所有的仓库历史记录! - Ari
1
这是Github应该考虑的事情。可以实现类似这样的功能,仓库所有者向贡献者提出要求从仓库主页面中删除其名称,然后贡献者可以接受或拒绝该请求。 - Badmaash
11个回答

62

以下方法在我的情况下有效。

  1. 在 GitHub 网页上,更改分支名称(例如,将 main 更改为 main1)。这将更新 GitHub 仓库面板上的贡献者列表。
  2. 然后再将其更改回来(将 main1 更改为 main)。

我有多个 GitHub 帐户用于不同项目和社区。但是不小心使用了错误的帐户提交了一次提交。我更改了提交的作者,但是错误的帐户仍然出现在 GitHub 仪表板的贡献者列表中。这种方法可以保留提交历史记录以及 GitHub 操作设置和问题历史记录,但我没有检查拉取请求是否被保留。


7
可以确认这个方法非常有效。在通过GitHub支持从原始仓库中分离出一个派生仓库之后,这非常有用。 - grandchild
7
我删掉了使用错误账户作为作者的“坏”提交记录,这对我有用。 - Ed_
7
更改分支名称对我没有起作用。 - Bugs Happen
1
这对我也起作用。因此,遵循以下步骤:1)使用git rebase方法从贡献者中删除提交,然后2)重命名主分支,3)再将其重命名回来。非常感谢@www_runner的评论! - Benjamin RAIBAUD
可以确认这对我有效(在重命名分支之前,有关贡献者的单个提交已被删除)。 - undefined

35

你无法删除贡献者(至少不建议这样做,因为这会改变历史记录)。

这些用户在您的存储库历史记录中有提交,因此代码行已由他们添加。即使您删除了他们所有的代码行,他们仍将显示为贡献者。

贡献者并非合作者。

合作者是由存储库所有者授权具有直接访问权限(通常是写入权限)的贡献者,这意味着他们不需要分叉存储库,可以被指派到问题等其他任务。


如果您撤销他们的访问权限,那么不会。如果您删除他们的提交记录,我认为是可以的,或者重命名他们。但请记住,重命名和删除提交记录会产生重大影响。但请注意重命名和删除提交记录的重大影响 - Peter Reid
我理解所有的内容,只是你似乎断然地说“不行”,而现在你的评论却说“是的,我认为你可以做到,只需要用另一种方式”。如果他的主要目标是摆脱贡献者,那么看来确实有一种方法。 - Lasse V. Karlsen
在git中重写历史记录真的不应该被做,因此我总是会将其排除为选项。即使如此,我也不能保证它会达到预期的效果。 - Peter Reid
3
这件事情发生在我身上。我重新命名了我的用户ID,结果被别人占用了。现在,在存储库中有些条目是以userid@github的形式出现的。尽管这个人与我的项目毫无关系,但它们仍然显示为贡献者。非常让人恼火。Github需要允许你将提交归属于任何你想要的人,而不仅仅是存储库历史记录中的用户电子邮件。 - Juan
@Juan,Git中用户电子邮件的整个意义在于它的作者。尽管较新的GitHub电子邮件包括用户ID,因此可能不受用户名更改的影响。 - qwr
显示剩余2条评论

23

我不小心从一个旧账号提交了代码。即使我已经移除了这次提交,旧账号仍然留在贡献者列表上。为了让它从列表中消失,我必须从GitHub上删除这个旧账号。


这个解决方案有点冒险(就像有人可能会意外删除错误的账户:D),但它可以很好地工作。 - westman379

7
您无法删除它,但可以更改其名称(更改为您的名称)。然而,我强烈建议不要这样做,因为这会影响所有其他合作者和贡献者(请参见下文)。
详细信息请参见此处。简而言之,您必须使用filter-branch,例如通过以下脚本:
git filter-branch --env-filter '
if [ "$GIT_AUTHOR_NAME" = "OLD NAME" ]; then \
    export GIT_AUTHOR_NAME="NEW NAME" GIT_AUTHOR_EMAIL="new.name@mail.com"; \
fi
'

为什么最好不这样做?因为它会带来一些严重的副作用,例如使所有后续的提交哈希值无效,正如Peter Reid所提到的。


5

在GitHub存储库设置中将存储库的可见性从公共更改为私有,然后再从私有更改为公共

注意:

为使此操作生效,您必须与该用户没有任何关联,例如提交、发布、其他分支中的提交或标记。

注意:

您将失去所有存储库的星标和观看次数。如果您关心星标,请先使用其他风险较小的方法。


1
这个周围的代码不起作用! - Biswadeep Sarkar
然后您必须有一个与该存储库相关联的提交或与该用户相关联的其他内容。您应该从存储库中删除所有与该用户相关的内容,然后再次尝试。 - sanket kheni
1
这对我有用。只是从一个错误的账户提交了一次。我首先从分支中移除了它,然后强制推送了该分支以在远程服务器上重写它。然后我改变了仓库的可见性,这就解决了问题。谢谢! - Vitor
2
对我来说,这是唯一可行的解决方案(2023年8月)。 - thc

5

这是可能的,但可能会有挑战。

您需要重写历史(通常不建议这样做)。

如何做到呢?

  1. You should rewrite all the history commits of the contributor and change the commits to a different author. There are some ways to do it, I found the simplest is by executing amend on an existing commit with changing the author. e.g: Bellow a commit pick you should write:
    exec git commit --amend --author="{NewAuthorName} <{NewAuthorEmail}>" -C HEAD
    
    Watch this explanation https://www.youtube.com/watch?v=7RZgtT4cbw0.
  2. After the contributor doesn't have any commit in the history - update any GitHub setting to refresh the list and then wait for a couple of minutes. For example, you may update the default branch name under your repository => Settings => Code and automation => Branches => Default branch. And then return the original branch name.

在双方更新后,等待几分钟,然后它应该会从名单中删除贡献者。


4
假设您是代码库的所有者并且出于正确的意图,您可以在代码库上使用“重命名”功能。本质上,创建代码库的副本并按以下步骤交换代码库名称,就像交换变量一样。
1. 创建一个新的“副本”代码库 2. 从“原始”代码库中复制仅具有预期作者提交的精选内容。 3. 将“原始”代码库重命名为“to_be_deleted”,并将“副本”重命名为“original”。
可以使用以下步骤选择来自原始代码库的提交。
- git remote add repo2 https://github.com/mygit/original.git - git pull repo2 - git cherry-pick - git push

贡献者基本上是存储库中任何提交的作者。我曾经在我的存储库中的作者列表中不小心放了一个错误的电子邮件,然后github开始在存储库中显示一个新的贡献者。我尝试 撤销提交,但没有帮助。最终我不得不创建/重命名/删除原始存储库。


正是我的情况 - 但是repo2指的是什么? - Colin
repo2 只是远程仓库的本地名称,您将从中拉取提交。 - ViFI
当你说“副本”存储库时,你是指只是一个空的存储库,你将推送挑选的提交,还是一个实际的镜像存储库? - Pasha Skender
@PashaSkender:是的,只需要一个新的空仓库。 - ViFI
@ViFI 我是一个 Git 的新手。我尝试了你的解决方案。使用 cherry-pick 命令是否会保留之前提交的详细信息,例如日期?但在我的情况下,它并没有保留。新仓库中的提交日期被今天的日期覆盖了。我做错了什么吗? - Shourya Shikhar

1

这里的所有答案都对我没用。我做了以下操作并成功:

  1. 使用 git-filter-repo 工具更改指向另一个帐户的所有提交电子邮件(两个),像这样
  2. 按照重命名分支的建议,将 main 更名为 main1,再将 main1 更名为 main(至少不会立即生效)。
  3. 大约两到三个小时后返回仓库,问题得到解决。

第二点可能是不必要的。


0

绕过测试 2022

(在执行此操作之前,请创建适当的备份)

假设您要删除的贡献者提交后没有太多提交记录。

  1. 下载 Github for Desktop
  2. 创建一个虚拟文件夹,并在 Github for Desktop 请求克隆存储库的位置时将其指向该虚拟文件夹(不要使用您的工作目录)
  3. 一旦您克隆了存储库,您应该会看到历史选项卡,选择提交(假设最新的提交来自您要删除的贡献者)并选择“撤消此提交”的选项
  4. 强制向 Github 推送此更改
  5. 现在主分支中没有来自该用户的提交
  6. 从默认分支创建一个新分支,并导航至 github.com 上存储库的设置
  7. 在设置页面上,将默认分支更改为您创建的新分支
  8. 由于这个新分支没有要删除的贡献者的提交,您将强制 github.com 自动刷新贡献者列表,并将删除该贡献者。
  9. 现在您可以将默认分支更改回旧分支(通常是 master/main),您将发现贡献者已从刷新后的列表中删除。

简而言之:将更改还原到用户没有贡献需要被删除的阶段 ---> 创建一个新分支并将其设置为默认,这样可以强制github.com刷新贡献者列表 ---> 将设置更改回旧分支作为默认。 您可以删除您创建的临时新分支。


0

修复提交记录显示复制/克隆存储库的用户

我来到这个问题是因为我不经思考地在同事下载的我的存储库副本上工作,而不是在我的本地副本上。

我没有更改已下载的存储库的GIT电子邮件,因为我(愚蠢地)从他的下载中复制了存储库,所以我推送到GitHub的所有内容都归功于他的帐户,使用他设置的电子邮件地址(无意识地)在他登录GitHub并下载我的存储库时(在“.git”文件夹中)。

一旦我检查更改了该存储库的电子邮件为我的电子邮件(请参见下面的两个命令,在存储库目录中执行),我的推送就被正确归属:

git config user.email
git config user.email myemail@mydomain.com

很遗憾,如果要删除他在这些提交中的一些作为贡献者的身份需要进行大量的操作,但他是一个值得信赖的同事和朋友,所以我能够接受这种情况。


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