从Git删除凭证


621

我正在使用多个存储库,但最近我只是在内部存储库中工作,一切都很棒。

今天,我不得不提交代码并将其推送到其他代码中,但是我遇到了一些麻烦。

$ 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文件吗?
罗宾斯特2013年

2
@robinst这是一台Windows计算机,我什至没有从Git Bash那里找到那个文件...
balexandre13年

对于Windows计算机,使用@balexandre时,我更喜欢使用新的(git 1.8.3)凭据帮助器netrc,它将在加密文件中存储多个凭据。这比每次为每个会话输入密码都要好,因为缓存仅“缓存”密码一定时间。在这里查看完整的示例
VonC

我没有.netrc。我在〜(C:\ Users \ Myself)中确实有一个名为.git-credentials的文件,但是删除它没有用,我仍然登录到Git Shell。另外,“控制面板凭据管理器”似乎没有存储任何内容。本地和全局Git配置文件似乎还可以。我从离开的一名员工那里继承了我的工作站,所以可能是他建立了一些不合常规的凭据缓存机制,我不知道该如何关闭。我希望这种行为不是Git Windows的默认行为。在Mac上,凭据缓存是默认设置,但至少它会显示在“钥匙串访问”中。
damix911

更完整的答案也可以在Linux,Windows和Mac OS X上使用,请参见stackoverflow.com/a/39944557/3906760
MrTux 2016年

Answers:


652

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

  • 转到凭证管理器
  • 转到Windows凭据
  • 删除“通用凭据”下的条目
  • 重新尝试连接。这次,它将提示您输入正确的用户名和密码。

Go to Credential Manager

Go to Windows Credentials and Delete the entries under Generic Credentials


4
仅当您的时才相关credential.helper=manager。要测试这种类型git config --list。如果将其设置为store凭据,则凭据不会存储在凭据存储中,而是以未加密的方式存储。
利亚姆(Liam)

3
我只需要删除命名的凭据git:https://github.com,下次我使用PyCharm克隆存储库时,系统会提示我输入我的用户名/密码。我有多个github帐户,并且错误的一个被缓存。
dotcomly

22
如果有人在德语本地计算机上搜索此文件,则该路径为path上的“ Anmeldeinformationsverwaltung”Systemsteuerung\Alle Systemsteuerungselemente\Anmeldeinformationsverwaltung
davidenke '18

3
或者,您可以在中更改用户/密码Credential Manager。这对我也
起作用

删除凭据可以403通过Bitbucket 解决我的错误。
Eido95 '18 / 12/30

672

Git凭证缓存运行一个守护进程,该进程将您的凭证缓存在内存中,并根据需要将其分发出去。因此,杀死git-credential-cache--daemon进程会丢弃所有这些东西,如果继续使用它作为cache.helper选项,则会导致重新提示您输入密码。

您还可以使用禁用Git凭据缓存的使用git config --global --unset credential.helper。然后重置此设置,您将继续拥有可用于其他存储库(如果有)的缓存凭据。git config --system --unset credential.helper如果已在系统配置文件(例如,适用于Windows 2的Git)中进行了设置,则可能还需要这样做。

在Windows上,最好使用管理器帮助git config --global credential.helper manager)。这会将您的凭据存储在Windows凭据存储中,该凭据存储具有控制面板界面,您可以在其中删除或编辑存储的凭据。通过此存储,您的详细信息受Windows登录名保护,并且可以在多个会话中保留。Windows 2.x的Git中包含的管理器帮助程序已替换了Windows 1.8.1.1的Git中添加的较早的wincred帮助程序。一个类似的名为winstore的帮助程序也可以在线获得,并与GitExtensions一起使用,因为它提供了更多的GUI驱动的界面。该经理助手提供了相同的GUI界面winstore

Windows 10支持页面中摘录,其中详细介绍了Windows凭据管理器:

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

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


197
Control Panel\User Accounts\Credential Manager在Windows 7下找到Windows凭据控制面板
Steve Pitchers 2015年

2
不会终止进程吗,所以仍然可以访问密码?根据git手册,它们存储在“纯文本”中。
Ufos '16

1
在Windows 8.1下,“ Windows凭据”位于“通用凭据”和git:gitlab.com或您选择的git服务器下。
杰夫

5
在Windows 8/10下,详细的用户帐户设置位于“经典”控制面板下,而不位于“设置”应用程序(现代UI)下。只是为了避免混乱。
DanielH

1
在Windows中10转到“控制面板\所有控制面板项目\凭据管理器”。GitHub可能有通用证书。您可以在那里更新用户名和密码。
Eldhose Abraham

155

重新输入:

$ git config credential.helper store

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

警告

使用此帮助程序会将密码未加密地存储在磁盘上

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


35
此命令不再要求再次输入我的凭据,此命令无济于事
Shirish Herwade

3
@ShirishHerwade尝试git pull,然后您会看到提示屏幕
ismailcem

2
@jkokorian要撤消此命令,请从中删除相关行.git/config
Zenadix

110

我遇到了与OP相同的问题。它使用了存储在系统中某个地方的旧Git凭据,并且我想将Git与新凭据一起使用,因此我运行了命令

$ git config --system --list

这显示了

credential.helper=manager

每当执行时,git push它都会使用我早已设置的旧用户名,并且我想使用新的GitHub帐户来推送更改。后来我发现我的旧GitHub帐户凭据存储在“ 控制面板” →“ 用户帐户” →“ 凭据管理器” →“ 管理Windows凭据”下

管理Windows凭据

我只是删除了这些凭据,当我执行这些操作时,git push它询问了我的GitHub凭据,它的工作原理很吸引人。


很好地说明了最近的Git凭据管理器(github.com/Microsoft/Git-Credential-Manager-for-Windows),该管理器通过存储凭据(github.com/Microsoft/Git-Credential-Manager-for-Windows/问题/…)+1
VonC

1
@VonC我花了一天的时间才发现这一点,因为我不知道这种存储凭据的机制。
Mourya

确实这是最近的事。感谢您在这里提及。
VonC

这可能是比“接受的”答案更好的答案,在我看来,这意味着放弃所有凭据。绝对帮助了我。
VictorLegros

52

尝试使用以下命令。

git credential-manager

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

在此处输入图片说明

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

git credential-manager uninstall

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


10
我为什么得到-– git: 'credential-manager' is not a git command. See 'git --help'.
Saikat

2
不确定,为什么它不适合您,但是即使在最新的git版本中,它也可用。请参考此链接以获取更多信息-git-scm.com/book/gr/v2/Git-Tools-Credential-Storage
Himanshu Aggarwal

3
得到了removal failed. U_U Press any key to continue... fatal: InvalidOperationException encountered. Cannot read keys when either application does not have a console or when console input has been redirected from a file. Try Console.Read.(好U_U表情符号无处不在:))
jeromej 17/12/30

1
在Windows上使用GitBash的唯一适用于我的解决方案。
alain.janinm

也许放在一边,但是我通过choco安装了git,这种[uninstall]方法对我来说很不错,因为它可以在不存储凭据的情况下在已部署的计算机上提取存储库
beep_check

32

我找到了对我有用的东西。当我向OP写评论时,我未能检查系统配置文件:

git config --system -l

显示一个

credential.helper=!github --credentials

线。我取消了

git config --system --unset credential.helper

现在忘记了凭据。


2
Ankur,如果已配置了两个凭据帮助程序,则可能需要以2-3次类似的方式运行建议的命令。git config --global --unset credential.helper也许只是git config --unset credential.helper在您的存储库中(如果您以某种方式在其中进行了显式设置)。
dragon788

感谢您的解决方案。只是一个细节:就我而言,我必须以管理员身份启动命令提示符
A.Joly


20
git config --list

将会呈现 credential.helper = manager(在Windows计算机上)

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

git config credential.helper ""

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


git: 'credential-' is not a git command. See 'git --help'.遇到以下错误,但是为了安全起见,我赞成这个答案,因为这是唯一一个提示我输入新密码的提示。我想知道,但这是否只是掩盖了问题(是否真的删除了密码?)
ribamar

不,rm -rf ~/.git-credentials是的。请注意,它可能有所不同(git help credential-store
ribamar

抱歉,这确实行不通。它将再次要求输入密码并再次存储。如果允许,将删除我的投票。
ribamar

git config --unset credential.helper清除条目。此答案只是将其设置为空字符串,并产生@ribamar在注释中描述的错误。
黑暗城堡

15

在带有“ wincred” *的Windows 2003 Server中,没有其他答案对我有帮助。我不得不用cmdkey

  • cmdkey /list 列出所有存储的凭据。
  • cmdkey /delete:Target 删除带有“目标”名称的凭证。

cmdkey /列表;  cmdkey /删除:目标

(*“ wincred”是指git config --global credential.helper wincred


是的,cmdkey是所选答案中描述的Windows凭据的命令行副本。
nicobo,

15

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

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

请按照以下步骤删除github.com凭证。

  1. 开放式钥匙串访问
  2. 查找github
  3. 选择github.com并右键单击它
  4. 删除“ github.com”
  5. 再试一次将其推入或拉入git,它将要求提供凭据。
  6. 输入存储库帐户的有效凭证。
  7. 完成

    在此处输入图片说明


谢谢,这在Mac OS上完美运行
babygame0ver

13

需要分别登录github usernamepassword

在Windows中清除用户名和密码

控制面板\用户帐户\凭据管理器

编辑Windows凭证

删除现有用户,现在转到命令提示符,编写push命令,该命令显示一个github弹出窗口,输入username/ emailpassword

现在,我们可以在切换用户之后推送代码。


13

进行“ git pull”时遇到相同的错误,这就是我解决的方法。

  1. 将仓库更改为HTTPS
  2. 运行命令 git config --system --unset credential.helper
  3. 运行命令 git config --system --add credential.helper manager
  4. 测试指令 git pull
  5. 在弹出的登录窗口中输入凭据。
  6. Git拉成功完成。

- 系统?那--global呢?那没有范围呢?设置范围是什么意思?
masterxilo

仅通过第一步即可解决我的问题。
zzxwill

11

从Windows当前登录用户文件夹中的.gitconfig文件中删除以下行:

[credential]
helper = !\"C:/Program Files (x86)/GitExtensions/GitCredentialWinStore/git-credential-winstore.exe\"

这对我有用,现在当我按下遥控器时,它会再次要求我输入密码。



10

您必须在凭据管理器中对其进行更新。

转到控制面板>用户帐户>凭据管理器> Windows凭据。您将在列表中看到Git凭据(例如git:https://)。单击它,更新密码,然后从您的Git bash执行git pull / push命令,它不会再抛出任何错误消息。


10

在Windows 10 Professional上使用Windows的最新版本git时,我遇到了类似的问题,即我有两个不同的GitHub帐户以及一个Bitbucket帐户,因此VS2017,git扩展和git bash有点令人困惑。

我首先检查了git如何使用此命令处理我的凭据(使用提升的命令运行git bash,否则会出错):

git config --list

我找到了“凭证管理器”条目,因此我单击了“开始”按钮>将“凭证管理器”键入到中,然后左键单击了启动应用程序的凭证管理器黄色安全图标。然后,我单击了Windows凭据选项卡,并找到了我当前git帐户的条目,该条目恰好是Bit-bucket,因此我删除了该帐户。

但这并不能解决问题,因此下一步是取消凭据,我是在笔记本电脑上的存储库目录中执行此操作的,其中包含我要推送到远程的GitHub项目。我输入了以下命令:

git config --system --unset credential.helper

然后我进行了git push,然后提示我输入我输入的GitHub用户名(我需要的正确用户名),然后关联的密码和所有内容都正确推送了。

我不确定这会带来多大的影响,大多数人可能都在一个存储库中工作,但是我必须跨多个存储库并使用不同的提供程序,因此可能再次遇到此问题。


为我工作..谢谢你
Krishnamoorthy Acharya

8

就我而言,我找不到Windows凭据管理器(Windows 7)中保存的凭据。

我能够通过执行重置我的凭据

git config --global credential.helper wincred

老实说,真是个冰雹玛丽,看看它是否会抹掉我的证书,并且确实有效。


这对我有用;我在凭据管理器中没有要删除的条目。
bdwakefield '17

7

您可以credential.helper=!github --credentials从以下文件C:\Program Files\Git\mingw64\etc\gitconfig中删除该行,以便删除git的凭据




6

如果您想让git忘记保存的旧凭据并重新输入用户名和密码,则可以使用以下命令进行操作:

git credential-cache exit

运行上述命令后,如果您尝试执行任何操作,它将提供输入用户名和密码的选项。


3

对于我来说,最终解决此问题的方法是使用GitHub桌面,转到存储库设置,然后从存储库URL中删除user:pass @。然后,我尝试从命令行进行推送,并被提示输入登录凭据。我把这些放进去之后,一切恢复了正常。Visual Studio和命令行都可以使用,当然GitHub桌面也可以使用。

GitHub桌面->存储库->存储库设置->远程选项卡

从以下位置更改主远程存储库(来源):

https://pork@muffins@github.com/MyProject/MyProject.git

至:

https://github.com/MyProject/MyProject.git

点击“保存”

凭据将被清除。


在Windows上从命令行将原点重置为同一原点已解决了我的问题。我使用的是GitLab,因此无法使用GitHub Desktop。
大卫·瓦尔加斯

3

对于macOS用户:

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

请按照以下步骤删除github.com凭证。

  1. 前往搜寻器
  2. 转到应用程序
  3. 转到实用程序文件夹
  4. 开放式钥匙串访问
  5. 选择github.com并右键单击它

    删除“ github.com”

再试一次将其推入或拉入git,它将要求提供凭据。输入存储库帐户的有效凭证。完成


3

对于Windows 10,请转到以下路径,

控制面板\用户帐户\凭据管理器

此位置将有2个标签,

  1. Web凭据和2. Windows凭据。

单击Windows凭据选项卡,在这里您可以在“通用凭据”标题下看到存储的github凭据。

您可以从此处删除这些证书,然后尝试重新克隆-由于我们刚刚从Windows 10系统中删除了存储的凭据,因此它将要求输入用户名/密码。


2

要清除Windows缓存的Git凭据管理器,请执行以下操作:

rm $env:LOCALAPPDATA\GitCredentialManager\tenant.cache

要么

rm %LOCALAPPDATA%\GitCredentialManager\tenant.cache

2

当上述任何方法都不对您有用时,请尝试此操作。

git config credential.helper 'cache --timeout=30'

这将每3秒删除一次缓存,并要求输入用户名和密码。您可以使用增加的超时值重新运行该命令。


1

在本例中,清除用户.git-credentials文件中的密码对我们有用。

c:\users\[username]\.git-credentials

是的,其他几个人已经说了很多遍了
Liam

1

从@patthoyts的最高答案(https://stackoverflow.com/a/15382950/4401322)构建:

他的答案使用但不解释“本地”与“全局”与“系统”配置。他们的官方git文档在这里,值得一读。

例如,我在Linux上,并且不使用系统配置,因此我从不使用--system标志,但通常需要区分--local--global配置。

我的用例是我有两个Github凭证;一种是工作,另一种是娱乐。

这是我处理问题的方法:

$ cd work
# do and commit work
$ git push origin develop
# Possibly prompted for credentials if I haven't configured my remotes to automate that. 
# We're assuming that now I've stored my "work" credentials with git's credential helper.

$ cd ~/play 
# do and commit play
$ git push origin develop                                                                   
remote: Permission to whilei/specs.git denied to whilei.                
fatal: unable to access 'https://github.com/workname/specs.git/': The requested URL returned error: 403

# So here's where it goes down:
$ git config --list | grep cred
credential.helper=store # One of these is for _local_
credential.helper=store # And one is for _global_

$ git config --global --unset credential.helper
$ git config --list | grep cred
credential.helper=store # My _local_ config still specifies 'store'
$ git config --unset credential.helper
$ git push origin develop
Username for 'https://github.com': whilei
Password for 'https://whilei@github.com':
Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 1.10 KiB | 1.10 MiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/whilei/specs.git
   b2ca528..f64f065  master -> master

# Now let's turn credential-helping back on:
$ git config --global credential.helper "store"
$ git config credential.helper "store"
$ git config --list | grep cred
credential.helper=store # Put it back the way it was.
credential.helper=store

还值得注意的是,有一些方法可以完全避免此问题,例如,您可以将~/.ssh/configGithub的SSH密钥(带有一个用于工作,一个用于播放)以及相应的自定义远程主机使用SSH来解决身份验证上下文。


1

要添加到@ericbn的https://stackoverflow.com/a/41111629/579827,这些是我嵌入在脚本中的示例命令,我会运行该脚本来更新所有密码。由于它很具体,可能无法原样使用,但它显示了的实际用法cmdkey.exe

is这是在cygwin中运行的shell脚本⚠

works之所以有效,是因为我使用了私有git repos,它们都使用相同的密码进行身份验证(您可能不想使用相同的凭据进行循环,但是您可以重复使用此示例/list命令来提取已注册的凭据的列表)

entries=`cmdkey.exe /list: | grep git | sed -r -e 's/^[^:]+:\s*(.*)$/\1/gm'`
for entry in ${entries}
do
    cmdkey.exe "/delete:${entry}"
    cmdkey.exe "/generic:${entry}" "/user:${GIT_USERNAME}" "/pass:${GIT_PASSWORD}"
done

0

如果使用密钥对进行了身份验证,则可以删除或移动私钥,或者停止密钥代理并尝试。


2
他使用的是https,所以这里没有涉及密钥
CharlesB 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.