879

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

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

$ 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'

为了避免凭据缓存...

似乎没有任何效果;有人有更好的主意吗?

4

39 回答 39

1108

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

  • 转到凭据管理器

    • 在德语中,它被称为:Anmeldeinformationsverwaltung
    • 在法语中,它被称为:Gestionnaire d'identification
    • 在波兰语中,它被称为:Menedżer poświadczeń
    • 在葡萄牙语中,它被称为:Gerenciador de Credenciais
    • 在俄语中,它被称为:Диспетчер учётных данных
    • 在西班牙语中,它被称为:Administrador de credenciales

    转到凭据管理器

  • 转到 Windows 凭据

  • 删除通用凭据下的条目

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

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

于 2016-09-21T06:24:42.067 回答
748

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

您还可以使用git config --global --unset credential.helper. 然后重置它,您将继续为其他存储库(如果有)提供缓存的凭据。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 Windows 1.8.1.1 中添加的wincred助手。一个名为winstore的类似帮助程序也可以在线获得,并与 GitExtensions 一起使用,因为它提供了更多的 GUI 驱动界面。manager助手提供与winstore相同的 GUI界面。

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

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

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

于 2013-03-13T10:38:59.077 回答
184

重新输入:

$ git config credential.helper store

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

警告

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

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

于 2014-11-18T18:55:31.980 回答
156

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

$ git config --system --list

这显示了

credential.helper=manager

每当我执行git push时,它都会使用我很久以前设置的旧用户名,并且我想使用新的 GitHub 帐户来推送更改。后来我发现我的旧 GitHub 帐户凭据存储在 Control PanelUser AccountsCredential ManagerManage Windows Credentials下。

管理 Windows 凭据

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

于 2016-09-20T11:09:39.527 回答
63

尝试使用以下命令。

git credential-manager

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

在此处输入图像描述

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

git credential-manager uninstall

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

于 2016-08-11T05:57:08.807 回答
47

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

git config --system -l

显示一个

credential.helper=!github --credentials

线。我取消了它

git config --system --unset credential.helper

现在凭证被遗忘了。

于 2015-11-18T11:21:06.217 回答
36
git config --list

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

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

git config credential.helper ""

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

于 2017-09-25T14:51:04.687 回答
35

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

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

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

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

    在此处输入图像描述

于 2018-12-03T11:11:33.560 回答
33

就我而言,Git 使用 Windows 来存储凭据。

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

Windows 凭据菜单

于 2017-03-02T14:20:52.753 回答
32

您必须在您的凭据管理器中更新它。

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

于 2018-06-18T23:45:49.290 回答
23

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

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

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

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

于 2016-12-12T23:55:17.687 回答
17

在 Windows 10 Professional 上使用适用于 Windows 的最新版本的 git,我遇到了类似的问题,即我有两个不同的 GitHub 帐户和一个 Bitbucket 帐户,所以对于 VS2017、git 扩展和 git bash,事情变得有点混乱。

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

git config --list

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

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

git config --system --unset credential.helper

然后我做了一个 git push ,系统提示我输入一个 GitHub 用户名(我需要的正确用户名),然后是相关的密码,一切都被正确推送。

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

于 2018-09-16T15:51:22.080 回答
17

执行“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 pull 成功完成。
于 2018-10-01T03:25:19.190 回答
16

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

git credential-manager clear

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

git config --global credential.helper
→ manager
于 2018-01-23T15:53:01.877 回答
14
  1. C:\Users\<current-user>
  2. 检查.git-credentials文件
  3. 根据您的要求删除或修改内容
  4. 重启你的终端
于 2018-07-16T21:00:57.920 回答
14

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

git credential-cache exit

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

于 2019-12-13T08:25:41.343 回答
14

如果您的凭据存储在凭据帮助程序中(通常是这种情况),则删除为特定主机保留的密码的可移植方法是调用git credential reject

  • 在一行中:

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

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

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

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

于 2020-06-27T10:39:35.193 回答
13

需要使用相应的 github 登录usernamepassword

在 windows 中清除用户名和密码

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

编辑windows 凭据

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

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

于 2018-02-12T13:28:53.773 回答
12

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

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

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

于 2013-08-22T09:23:28.150 回答
12

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

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

git config --global credential.helper wincred

老实说,玛丽很高兴看到它是否会抹去我的凭据并且它确实有效。

于 2017-02-22T17:53:21.953 回答
8

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

git remote show origin
于 2019-05-02T19:57:40.613 回答
7

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

于 2016-05-25T04:19:08.803 回答
7

对于 macOS 用户:

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

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

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

删除“github.com”

再次尝试 Push 或 Pull 到 git,它会要求提供凭据。输入存储库帐户的有效凭据。完成,现在为答案投票。

于 2018-12-04T04:18:59.497 回答
6

这种方法对我有用,应该与操作系统无关。这有点笨拙,但很快,让我可以重新输入凭据。

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

$ git remote -v 
origin  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
于 2020-07-16T16:08:32.377 回答
4

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

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

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

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

到:

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

点击“保存”

凭证将被清除。

于 2018-08-04T08:40:51.050 回答
4

根据@patthoyts 的高票回答构建:

他的回答使用但没有解释localvs. globalvs. systemconfigs。他们的官方 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/config's 与 Github 的相关 SSH 密钥(一个用于工作,一个用于娱乐)和相应的自定义命名的远程主机来解决身份验证上下文化。

于 2018-12-21T18:42:00.260 回答
3

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

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

此位置将有 2 个选项卡,

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

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

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

于 2020-03-03T08:28:32.087 回答
3

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

⚠ 这是在cygwin中运行的shell脚本⚠</p>

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

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
于 2020-04-21T20:10:33.390 回答
3

Update实际上useHttpPath是一个git 配置,它应该适用于所有 GCM。已更正。

原始问题摘要

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

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

原因

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

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

解决方案

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

对于所有可能的主机:

git config --global credential.useHttpPath true

仅适用于 github.com:

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

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

于 2020-06-20T22:59:52.330 回答
2

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

c:\users\[username]\.git-credentials
于 2016-05-04T18:28:54.643 回答
2

在 PowerShell 控制台中执行以下命令以清除 Git Credentials Managers for Windows 缓存:

rm $env:LOCALAPPDATA\GitCredentialManager\tenant.cache

或在 Cmd.exe 中

rm %LOCALAPPDATA%\GitCredentialManager\tenant.cache
于 2019-04-16T16:26:07.633 回答
2

当上述任何方法都不适合您时,请尝试此操作。

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

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

于 2019-06-03T10:39:09.470 回答
1

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

在此处输入图像描述

于 2018-12-03T18:55:25.230 回答
1

Mac 设备的答案:

Applications/Utilities/Keychain Acccess

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

于 2021-02-25T23:20:15.353 回答
0

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

于 2013-03-13T09:22:32.567 回答
0

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

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

如下所示:

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

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

于 2020-07-04T18:06:45.230 回答
0

请运行以下命令 -

git config --global credential.helper cache

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

git config --global credential.helper store
于 2021-11-01T05:39:08.440 回答
0

如果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.com、、、bitbucket.comyourOwnServer.com

如果您看到输入凭据的提示,请单击“取消”:以前的凭据已从操作系统底层密钥管理器(Windows 凭据管理器、Linux libsecret 或 Mac osxkeychain)中消失

在下一次 git push 中,输入您的凭证作为 GCM-core 凭证助手的提示符:您的新凭证将被存储。

于 2021-11-01T11:49:36.077 回答
0

没有给出的答案对我有用。但最终对我有用的是:

rm -rf ~/.git-credentials

这将删除任何凭据!当您使用新git命令时,系统会要求您输入密码!

于 2022-01-07T08:34:46.167 回答