从Git中删除凭据

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

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

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

没有什么我可以做的,这将再次带来密码输入。

如何重置系统上的凭据,以便Git会向我询问该存储库的密码?

我试过:

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

为了解除密码

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

为了避免凭据缓存…

似乎没有什么工作;有人有更好的主意吗?

1403418 次浏览

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

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

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

在Windows上,您最好使用经理帮助程序(git config --global credential.helper manager)。它将您的凭据存储在Windows凭据存储中,该存储有一个控制面板界面,您可以在其中删除或编辑您存储的凭据。使用此存储,您的详细信息由您的Windows登录保护,并且可以在多个会话中持续存在。Git for Windows 2. x中包含的经理帮助程序已经取代了早先在Git for Windows1.8.1.1中添加的wincred帮助程序。一个名为winstore的类似帮助程序也可在线获得,并与GitEx的使用一起使用,因为它提供了一个更GUI驱动的界面。经理帮助程序提供与winstore相同的GUI界面。

从详细说明Windows凭据管理器的Windows 10支持页面中提取:

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

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

从位于Windows当前登录用户文件夹中的. gitconfig文件中删除此行:

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

这对我很有效,现在当我推到远程时,它会再次询问我的密码。

重新输入:

$ git config credential.helper store

然后系统会提示您再次输入凭据。

警告

使用此助手将未加密的密码存储在磁盘上

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

我发现了一些对我有用的东西。当我将评论写入OP时,我未能检查系统配置文件:

git config --system -l

显示了一个

credential.helper=!github --credentials

行。我用它解除设置

git config --system --unset credential.helper

现在证书被遗忘了。

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

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

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

尝试使用下面的命令。

git credential-manager

在这里,您可以获得各种选项来管理您的凭据(检查下面的屏幕)。

在此处输入图片描述

或者你可以直接尝试这个命令:

git credential-manager uninstall

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

我遇到了与OP相同的问题。它正在获取存储在系统某处的旧Git凭据,我想将Git与我的新凭据一起使用,所以我运行了命令

$ git config --system --list

它显示

credential.helper=manager

每当我执行git push时,它都会占用我设置很久的旧用户名,我想使用新的GitHub帐户来推送更改。后来我发现我的旧GitHub帐户凭据存储在控制面板用户帐户凭证管理器管理Windows凭据

管理Windows凭据

我只是删除了这些凭据,当我执行git push时,它要求我提供我的GitHub凭据,它就像一个魅力。

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

  • 转到凭据管理器

    • 在德语中,它被称为:法律信息
    • 在法语中,它被称为:身份查验管理
    • 在波兰语中,它被称为:我的意思是
    • 在葡萄牙语中,它被称为:创作者
    • 在俄语中,它被称为:Диспетчер учётных данных
    • 在西班牙语中,它被称为:行政主管
    • 在挪威语中,它被称为:让Jons来处理
    • 在捷克语中,它被称为:斯普拉夫采

    转到凭据管理器

  • 转到Windows凭据

  • 删除通用凭证下的条目

    转到Windows凭据并删除通用凭据下的条目

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

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

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

cmdkey /list; cmdkey /delete: Target

(*我的意思是“wincred”git config --global credential.helper wincred

在我的情况下,我找不到保存在Windows Credential Manager(Windows 7)中的凭据。

我可以通过执行来重置我的凭据

git config --global credential.helper wincred

老实说,这是一个冰雹玛丽,看看它是否会抹去我的证书,它实际上奏效了。

在我的例子中,Git使用Windows来存储凭据。

您所要做的就是删除存储在Windows帐户中的存储凭据:

Windows凭据菜单

git config --list

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

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

git config credential.helper ""

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

如果使用适用于Windows的Git Credential Manager(当前版本通常会这样做):

git credential-manager clear

这是2016年年中添加。要检查是否使用了凭据管理器:

git config --global credential.helper→ manager

需要使用各自的githubusernamepassword登录

清除Windows中的用户名和密码

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

编辑WindowsCredential

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

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

您必须在Credential Manager中更新它。

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

  1. 转到C:\Users\<current-user>
  2. 检查.git-credentials文件
  3. 根据您的要求删除内容或修改
  4. 重启你的终端

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

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

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

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

致:

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

点击“保存”

证书将被清除。

在Windows 10专业版上使用最新版本的Windows git,我遇到了类似的问题,即我有两个不同的GitHub帐户和一个Bitucket帐户,所以VS2017、git扩展和git bash有点混乱。

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

git config --list

我找到了Credential Manager条目,所以我单击了START按钮>输入了Credential Manager,然后左键单击了启动应用程序的凭据管理器黄色安全图标。然后,我单击了Windows凭据选项卡,找到了我当前git帐户的条目,碰巧是比特桶,所以我删除了这个帐户。

但这并没有起到作用,所以下一步是取消设置凭据,我从笔记本电脑上的存储库目录中执行此操作,该目录包含我试图推送到远程的GitHub项目。我输入了以下命令:

git config --system --unset credential.helper

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

我不确定这个问题有多大,大多数人可能会在一个存储库中工作,但我必须跨几个并使用不同的提供者,所以可能会再次遇到这个问题。

在做“git拉”时遇到了同样的错误,这就是我修复它的方式。

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

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

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

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

  1. 打开钥匙串访问
  2. 查找github
  3. 选择github.com并右键单击它
  4. 删除“github.com”
  5. 再次尝试Push或Pull到git,它会询问凭据。
  6. 输入存储库帐户的有效凭据。
  7. 完成

    输入图片描述

正如上面每个人都提到的,这是一个Git Credential Manager问题。由于权限,我无法修改我的凭据或操作凭据管理器。我也不能坐密码在PC上的纯文本。解决方法是删除intellij中的远程分支并重新添加远程分支。这会删除存储的凭据并强制刷新凭据。

在此处输入图片描述

对于macOS用户:

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

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

  1. 转到Finder
  2. 转到应用程序
  3. 转到实用程序文件夹
  4. 打开钥匙串访问
  5. 选择github.com然后右键单击它

删除"github.com"

再次尝试Push或Pull到git,它会询问凭据。输入存储库帐户的有效凭据。#36825;,现在就给我答案吧!

@帕特索伊茨的高票数回答开始:

他的回答使用但没有解释local vs.global vs.system配置。他们的官方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 developremote: 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 credcredential.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 credcredential.helper=store # My _local_ config still specifies 'store'$ git config --unset credential.helper$ git push origin developUsername for 'https://github.com': whileiPassword 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.gitb2ca528..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 credcredential.helper=store # Put it back the way it was.credential.helper=store

同样值得注意的是,有一些方法可以完全避免这个问题,例如,您可以使用~/.ssh/config与Github的相关SSH密钥(一个用于工作,一个用于游戏)和相应的自定义命名远程主机来解决身份验证上下文化。

在PowerShell控制台中执行以下命令,以清除Windows缓存的Git凭据管理器:

rm $env:LOCALAPPDATA\GitCredentialManager\tenant.cache

或者Cmd.exe

rm %LOCALAPPDATA%\GitCredentialManager\tenant.cache

在Windows上,至少,git remote show [remote-name]将工作,例如。

git remote show origin

当上面提到的任何东西都不适合你时,试试这个。

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

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

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

git credential-cache exit

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

对于Windows 10,转到下面的路径,

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

将有两个标签在这个位置,

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

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

您可以从这里删除这些并尝试重新克隆-它现在会要求用户名/密码,因为我们刚刚从Windows 10系统中删除了存储的凭据

为了添加到@ericbn的https://stackoverflow.com/a/41111629/579827中,这里是我嵌入在脚本中的示例命令,我运行该脚本以在更新所有密码时更新它们。它可能无法按原样使用,因为它非常具体,但它显示了cmdkey.exe的实际使用情况。

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

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

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

更新实际上useHttpPathgit配置,它应该适用于所有GCM。更正。

原问题摘要

  • 在Windows上使用git
  • 在GitHub上处理多个存储库
  • 用于另一个GitHub存储库的错误凭据

虽然标题写着“删除凭据”,但描述让我假设你可能在GitHub上有多个帐户,例如与工作相关的和私人项目。(至少这个问题让我找到了这个话题。)如果是这样,请继续阅读,否则请忽略答案,但它可能会在某个时候派上用场。

原因

默认情况下,Git Credential Manager(短GCM)如Microsoft的GCM for Windows存储每个主机的凭据。这可以通过检查Windows Credential Manager来验证(请参阅有关如何在英语,法语和德语Windows版本上访问它的其他答案)。因此,默认情况下,在同一主机上使用多个帐户(这里github.com)是不可能的。

2020年10月,GCM for Windows被弃用并被GCM核心取代。此处的信息仍然适用于新的GCM,它甚至应该使用GCM for Windows存储的凭据。

解决方案

配置git包含存储库的完整路径作为每个凭据条目的附加信息。也记录在GCM for Windows上。
我个人更喜欢包含HTTP(S)[存储库]路径,以便能够为每个存储库使用单独的帐户。

对于所有可能的主机:

git config --global credential.useHttpPath true

仅github.com:

git config --global credential.github.com.useHttpPath true

看看GCM和git文档,也许你想指定一些不同的东西。

如果您的凭据存储在凭据助手中(通常情况下),则删除特定主机的持久密码的可移植方法是调用git credential reject

  • 在一行中:

    $ echo "url=https://appharbor.com" | git credential reject
  • 或交互式:

    $ git credential rejectprotocol=httpshost=gitlab.comusername=me@example.com↵
    • 是回车符号,只需在输入结束时按回车键两次,不要复制/粘贴
    • wincred似乎无法识别用户名,因此请避免在Windows上按用户名进行过滤

之后,要输入新密码,请键入git fetch

https://git-scm.com/docs/git-credential

在您的项目根文件夹中打开. git/config服务配置。此文件包含有关远程URL和您的凭据类型的详细信息。

此文件中您当前的远程url可能正在存储凭据。从github复制远程url并更新此配置文件中的url。

像下面这样:

[remote "origin"]url = [update it]fetch = +refs/heads/*:refs/remotes/origin/*[credential]helper = manager

现在当您尝试推送代码时,它会要求提供凭据。谢谢

这种方法对我很有效,应该是不可知论的操作系统。它有点重手,但速度很快,允许我重新输入凭据。

只需找到您希望重新输入凭据的远程别名。

$ git remote -vorigin  https://bitbucket.org/org/~username/your-project.git (fetch)origin  https://bitbucket.org/org/~username/your-project.git (push)

复制项目路径https://bitbucket.org/org/~username/your-project.git

那就拿走遥控器

$ git remote remove origin

那就加回去

$ git remote add origin https://bitbucket.org/org/~username/your-project.git

mac设备的答案:

转到

Applications/Utilities/Keychain Acccess

搜索git.credentials,并删除所需URL的git凭据。

请运行以下命令-

git config --global credential.helper cache

然后运行任何git命令,如git ull,它将询问用户名和密码。输入详细信息,如果您想存储您的git凭据,请运行以下命令-

git config --global credential.helper store

如果git config credential.helper返回manager-core(来自跨平台GCM--Git Credential Manager Core项目),您可以:

  • 保持此设置不变

  • 使用跨平台GCM命令删除您的凭据:

    printf "Host=github.com\nusername=xxx\nprotocol=https" | \git credential-manager-core erase

检查它是否消失了:

  printf "Host=github.com\nusername=xxx\nprotocol=https" | \git credential-manager-core get

(将xxx替换为您的GitHub用户帐户名称)
(将github.com替换为实际的远程Git存储库托管服务器:gitlab.combitbucket.comyourOwnServer.com

如果您看到凭据提示,请单击“取消”:以前的凭据已从操作系统底层机密管理器(Windows Credential Manager,Linuxlib秘密或Mac osxkeychain)中消失

在下一次git推送时,通过GCM-core凭据助手将您的凭据作为提示器输入:您的新凭据将被存储。

没有答案对我有效。但这是最终对我有效的:

rm -rf ~/.git-credentials

这将删除所有凭据!当您使用新的git命令时,您将被要求输入密码!

在我的Win 10上,找不到Windows凭证管理器. git凭证。有效的方法是打开Git GUI并推送代码。然后它要求提供凭据,这也更新了我的Git Bash的缓存密码。