从Git中删除凭据

985

我正在处理几个代码库,但最近只在我们内部的那个上工作,一切都很顺利。

今天我必须提交并推送代码到另一个代码库,但是我遇到了一些问题。

$ git push appharbor master
error: The requested URL returned error: 403 while accessing https://gavekortet@appharbor.com/mitivo.git/info/refs?service=git-receive-pack
fatal: HTTP request failed

我无法做任何事情,以便再次出现输入密码的提示。

我该如何在我的系统上重置凭据,以便Git会要求我输入那个仓库的密码?

我已经尝试过:

  • git config --global --unset core.askpass

以取消密码:

  • git config credential.helper 'cache --timeout=1'

以避免凭据缓存……

似乎没有什么作用,有没有更好的想法?


你有一个 ~/.netrc 文件吗? - robinst
4
@robinst,这是一台Windows电脑,我无法找到那个文件,即使在Git Bash中也找不到... - balexandre
对于Windows机器,我更喜欢使用新的(git 1.8.3)凭据助手netrc,它可以将多个凭据存储在加密文件中。这比每次为每个会话输入密码要好,因为缓存只会为一定时间“缓存”密码。请参见此处的完整示例 - VonC
我没有 .netrc 文件。我在 ~(C:\Users\Myself)中有一个名为 .git-credentials 的文件,但擦除它并没有起作用,我仍然登录到 Git Shell。此外,控制面板凭据管理器似乎没有存储任何内容。本地和全局 Git 配置文件看起来都没问题。我的工作站是从一位离职的员工那里继承而来的,所以他可能设置了一些我不知道如何关闭的非正统凭据缓存机制。我希望这种行为不是 Git Windows 的默认行为。在 Mac 上,凭据缓存是默认的,但至少会显示在钥匙串访问中。 - damix911
1
关注安全的人可能希望在此之后确保执行 rm ~/.git-credentials。被提示输入密码并不意味着它们没有被存储。 - ribamar
显示剩余3条评论
40个回答

1266

如果在 Windows 计算机上出现此问题,请执行以下操作:

  • 转到凭据管理器

    • 德语中称为:Anmeldeinformationsverwaltung
    • 法语中称为:Gestionnaire d'identification
    • 波兰语中称为:Menedżer poświadczeń
    • 葡萄牙语中称为:Gerenciador de Credenciais
    • 俄语中称为:Диспетчер учётных данных
    • 西班牙语中称为:Administrador de credenciales
    • 挪威语中称为:Legitimasjonsbehandling
    • 捷克语中称为:Správce pověření
    • 荷兰语中称为:Referentiebeheer

    Go to Credential Manager

  • 转到 Windows 凭据

  • 删除通用凭据下的条目

    Go to Windows Credentials and Delete the entries under Generic Credentials

  • 再次尝试连接。 这次,它应该会提示您输入正确的用户名和密码。


21
只有在你的 "credential.helper" 设置为 "manager" 时,此信息才相关。要测试这个设置,请输入 "git config --list" 命令。如果设置为 "store",则凭证不会存储在凭证存储中,而是以未加密的方式存储。 - Liam
7
我只需要删除名为 git:https://github.com 的凭证,并在下次使用 PyCharm 克隆仓库时输入用户名/密码。我有多个 GitHub 账户,而且缓存了错误的账户信息。 - dotcomly
40
如果有人在德语本地化的计算机上搜索此内容,则路径为Systemsteuerung\Alle Systemsteuerungselemente\Anmeldeinformationsverwaltung,对应的中文名称为“凭据管理器”。 - davidenke
4
你可以选择在“凭据管理器”中更改用户名和密码。这对我也有效。 - Daniel Lerps
9
如果您无法通过 Windows 访问凭据管理器,可以从命令提示符中运行以下命令来访问它:rundll32.exe keymgr.dll,KRShowKeyMgr。 - chonerman
显示剩余9条评论

779
Git凭据缓存运行一个守护进程,将您的凭据缓存在内存中,并根据需要分发它们。因此,杀死git-credential-cache--daemon进程会丢弃所有这些内容,并在继续使用此作为cache.helper选项时导致重新提示您输入密码。
您还可以使用git config --global --unset credential.helper禁用Git凭据缓存。然后重置它,您将继续拥有其他仓库(如果有)可用的缓存凭据。如果已在系统配置文件中设置了此选项(例如,Git for Windows 2),则还需要执行git config --system --unset credential.helper。
在Windows上,你最好使用管理器助手(git config --global credential.helper manager)来存储你的凭据。这将把你的凭据存储在Windows凭据存储中,该存储有一个控制面板界面,你可以在其中删除或编辑已存储的凭据。使用此存储,你的详细信息由Windows登录保护,并且可以持久化多个会话。Git for Windows 2.x中包含的管理器助手已经取代了Git for Windows 1.8.1.1中添加的早期wincred助手。还有一个名为winstore的类似助手也可在线使用,并与GitExtensions一起使用,因为它提供了更多基于GUI的界面。管理器助手提供与winstore相同的GUI界面。
Windows 10支持页面中提取有关Windows凭据管理器的信息:
引用:

要打开凭据管理器,请在任务栏上的搜索框中键入“凭据管理器”,然后选择凭据管理器控制面板

然后选择Windows凭据以编辑(删除或修改)给定URL的存储git凭据。

208
在Windows 7中,我找到了位于“控制面板\用户账户\凭据管理器”下的Windows凭据控制面板。 - Steve Pitchers
2
杀死进程不会在某个地方留下任何痕迹,以便仍然可以访问密码吗?根据 Git 手册,它们以“纯文本”形式存储。 - Ufos
1
在Windows 8.1下,“Windows凭据”位于通用凭据下,并且包含git:https://gitlab.com或您选择的git服务器。 - Jeff
5
为了避免混淆,在Windows 8/10中,详细的用户账户设置位于“经典”控制面板下,而不是“设置”应用程序(现代界面)。 - DanielH
2
在Windows 10中,前往控制面板\所有控制面板项目\凭据管理器。那里可能会有一个GitHub的通用凭据。您可以在那里更新用户名和密码。 - Eldhose Abraham
显示剩余9条评论

208

重新输入:

$ git config credential.helper store

然后您将被提示再次输入您的凭据。

警告

使用此帮助程序将会将您的密码明文存储在磁盘上。

来源:https://git-scm.com/docs/git-credential-store


86
这个命令没有要求我重新输入凭据,这个命令什么也没做。 - Shirish Herwade
8
请尝试运行命令 "git pull",然后您就会看到提示屏幕。 - ismailcem
2
@jkokorian 要撤销此命令,请从“.git/config”中删除相关行。 - Zenadix
@zenadix 如果你不想手动操作,可以使用 git config --unset credential.helper - Cadoiz
此解决方案中给出的命令并未要求输入新密码,似乎没有任何作用。 - Alex

176

我遇到了和原帖作者一样的问题。Git使用了我之前存储在系统中的旧凭证,而我想要使用新凭证,所以我运行了下面的命令:

$ git config --system --list

它显示了

credential.helper=manager
每当我执行git push时,它会使用我遥远设置的旧用户名,并且我想使用新的GitHub帐户推送更改。后来我发现我的旧GitHub帐户凭据存储在控制面板用户帐户凭据管理器管理Windows凭据下。

Manage Windows Credentials

我只需删除这些凭据,然后执行git push时会要求输入我的GitHub凭据,这很有效。

最近的Git凭证管理器(https://github.com/Microsoft/Git-Credential-Manager-for-Windows)是一个很好的例子,它通过存储凭证(https://github.com/Microsoft/Git-Credential-Manager-for-Windows/issues/31)来工作。+1 - VonC
3
@VonC 我花了一天时间才发现这个,因为我不知道这种存储凭据的机制。 - Mourya
1
这可能是比“已接受”的答案更好的答案,因为它对我来说意味着销毁所有凭据。绝对帮了我。 - VictorLegros
5
Git Credential Manager Core是较新且默认的凭据管理器。在最近版本的Git中,git config --global --list现在应返回credential.helper=manager-core而不是credential.helper=manager - Asif Kamran Malick
1
附加的图片非常有帮助,感谢您添加它! - Or b
显示剩余2条评论

65

尝试使用以下命令。

git credential-manager

在此您可以获得各种选项来管理您的凭证(请查看下面的屏幕)。

在此输入图片描述

或者您甚至可以直接尝试此命令:

git credential-manager uninstall

这将会再次开始在每次服务器交互请求时提示输入密码。


30
为什么我会收到“git: 'credential-manager'不是一个git命令。请参见'git --help'。”的提示? - Saikat
2
不确定为什么它对你不起作用,但即使在最新的git版本中,它也是可用的。请参考此链接了解更多信息 - https://git-scm.com/book/gr/v2/Git-Tools-Credential-Storage - Himanshu Aggarwal
3
移除失败。U_U按任意键继续... 致命错误:遇到InvalidOperationException。 当应用程序没有控制台或者控制台输入被重定向到文件时,无法读取密钥。请尝试使用Console.Read。 (注意这里突然出现了一个很好看的“U_U”表情符号 :)) - jeromej
1
在Windows上使用GitBash,唯一有效的解决方案是这个。 - alain.janinm
@Saikat:检查一下你的~/.gitconfig文件——我敢打赌你在[credential]部分中有那行代码。 - Paul Sturm
显示剩余3条评论

55

我找到了适合我的解决办法。当我给 OP 写评论时,我没有检查系统配置文件:

git config --system -l
显示a
credential.helper=!github --credentials

我将它与 line 的设置取消了。

git config --system --unset credential.helper

现在凭据已经被遗忘。


6
如果你已经配置了多个凭证辅助工具,那么可能需要类似地运行建议的命令2-3次。如果你在存储库中明确设置了凭证辅助工具,可以尝试运行git config --global --unset credential.helper 或者 git config --unset credential.helper 来取消该设置。请注意,建议先在本地测试后再应用全局设置。 - dragon788
3
感谢您提供的解决方案。只有一个细节:在我的情况下,我必须以管理员身份启动命令提示符。 - A.Joly
1
只有这个方法在Mac上起作用。 - merdan

41

当您在同一台计算机上使用多个Git账户时,将会出现此错误。

如果您使用的是macOS,则可以删除保存的github.com凭据。

请按照以下步骤删除github.com凭据:

  1. 打开钥匙串访问
  2. 查找github
  3. 选择github.com并右键单击
  4. 删除"github.com"
  5. 再次尝试推送或拉取Git,它将要求输入凭据。
  6. 输入存储库帐户的有效凭据。
  7. 完成

    输入图像描述


2
最终找到一个适用于 Mac 的完美解决方案。 - Appy Mango
2
这在我的Mac上不起作用。我保存了几个Github密码并将它们全部删除,但仍然没有被要求输入凭据。我尝试了所有我看到的方法,但都无济于事。我有两个凭据被保存,但我无法删除它们。有人能帮忙吗? - alpablo20

39
git config --list

将显示credential.helper = manager(这是在Windows机器上)

要禁用当前本地git文件夹中的缓存用户名/密码,只需输入

git config credential.helper ""

这样,git每次都会提示输入密码,而不考虑“manager”中保存的内容。


我遇到了以下错误:git: 'credential-' 不是 git 命令。请参阅 'git --help'。,但出于安全考虑,我会点赞这个答案,因为它是唯一一个让我提示输入新密码的答案。然而,我在想这是否只是掩盖了问题(密码真的被删除了吗?) - ribamar
不是 rm -rf ~/.git-credentials。注意可能会有所不同(git help credential-store)。 - ribamar
抱歉,这真的不起作用。它会再次要求输入密码并将其存储。如果可以的话,我会取消我的点赞。 - ribamar
git config --unset credential.helper 命令可以清除该条目。但是,这个答案只是将其设置为空字符串,并产生了 @ribamar 在评论中描述的错误。 - Dark Castle
非常感谢,这对我很有帮助。真的非常感激,给你点赞。 - Arpan Saini
当我运行第二个命令时,会出现“fatal: not in a git directory”的错误。 - Bersan

36

在我的情况下,Git使用Windows存储凭据。

你只需删除存储在你的Windows账户中的凭据:

Windows凭据菜单


1
这与这个答案或者这个答案有何不同? - Liam
显然这里有描述性的图片 :-D - ahmednawazbutt

36

你需要在凭据管理器中更新它。

进入控制面板 > 用户账户 > 凭据管理器 > Windows 凭据。在列表中可以看到 Git 凭据 (比如 git:https://)。点击它,更新密码,然后从 Git bash 中执行 git pull/push 命令,就不会再出现错误消息了。


在我的Windows 10上可以工作,而且不需要重新启动我的IDE。 - Oleksandr H
谢谢!我在一台没有管理员权限的受限制的大学电脑上,无法删除一些错误的Git凭据。这个解决方案有效。 - OscarVanL

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