从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 username和password

在Windows中清除用户名和密码

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

编辑Windows凭证

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

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


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.