从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个回答

24
在具有“wincred”*的Windows 2003服务器中,其他答案都没有帮助我。我必须使用 cmdkey
  • cmdkey /list 列出所有存储的凭据。
  • cmdkey /delete:Target 删除名为“Target”的凭据。

cmdkey /list; cmdkey /delete:Target

我所说的“wincred”是指git config --global credential.helper wincred


是的,cmdkey 是与所选答案中描述的 Windows 凭据相对应的命令行工具。 - nicobo
这里是cmdkey命令的帮助文档供参考。 - undefined

20

我在Windows 10专业版上使用最新版本的git for Windows,并且我有两个不同的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用户名(我输入了需要的正确用户名),接着输入关联密码,提交操作执行成功。

我不确定这对以后的工作会有多大影响,大部分人可能只使用一个代码库,但是我需要跨越几个不同的提供者并使用多个代码库,所以可能会再次遇到此问题。


1
即使存储库存在,我仍然遇到了“找不到存储库”的错误。 GIT没有要求凭据。 我运行了这个命令:git config --system --unset credential.helper 然后它要求输入凭据,我的问题得到了解决。 - Karthik Nagaraj

19

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

git credential-cache exit

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


1
这是最佳解决方案! - Anmol Singh Jaggi
git: 'credential-cache' 不是 git 命令。请参见 'git --help'。 - Serdar Samancıoğlu
@SerdarSamancıoğlu 使用 git help -a 命令,你可以在低级命令 / 内部助手中看到有关 credential-cache 的信息。 - amitshree
@amitshree 实际上那不是一条评论,我只是复制了尝试git命令后得到的错误。 - Serdar Samancıoğlu
@SerdarSamancıoğlu,明白了。当你运行 git help -a 命令时,你能看到它吗? - amitshree

18

如果凭据助手是manager-core,这也同样适用。 - undefined

18

在执行 '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 成功完成。

--system?--global呢?没有作用域怎么办?设置作用域是什么意思? - masterxilo
对我没用,克隆时仍不要求凭据。 - Serdar Samancıoğlu
git config --system --unset credential.helper 输出 C:/Program Files/Git/etc/gitconfig: 权限被拒绝 - Giorgi Tsiklauri

17
  1. 进入C:\Users\<current-user>
  2. 检查.git-credentials文件是否存在
  3. 删除内容或根据您的需求进行修改
  4. 重新启动终端

经过两个小时的搜索和抓狂,我替换了.git-credentials文件中的令牌,然后它就起作用了。谢谢@Dinesh。 - Daniel B

16
如果您的凭据存储在凭据助手中(通常情况下),从特定主机中删除持久化密码的便携式方法是调用git credential reject命令。
$ echo "url=https://appharbor.com" | git credential reject
  • 或者交互式地:

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

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

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


  • 14

    需要使用相应的github用户名和密码进行登录

    在Windows中清除用户名和密码

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

    编辑Windows凭据

    删除现有用户,现在进入命令提示符输入push命令,它会显示一个Github弹出窗口以输入用户名/电子邮件密码

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


    12

    在我的情况下,我无法找到保存在Windows凭据管理器(Windows 7)中的凭据。

    通过执行以下操作,我能够重置我的凭据:

    git config --global credential.helper wincred
    

    说实话,这只是一次孤注一掷的尝试,看看是否能够清除我的凭据,而它真的起作用了。


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

    12

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

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

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


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