
【亲测有效】Windows 下 Git 每次提交/推送都弹出 GitHub 账号选择窗口的解决方法文章目录【亲测有效】Windows 下 Git 每次提交/推送都弹出 GitHub 账号选择窗口的解决方法一、问题描述二、问题原因三、问题解决方法1. 确认当前仓库使用 HTTPS2. 查看 Git Credential Manager 中的 GitHub 账号3. 删除不需要的 GitHub 账号4. 设置默认使用 yangdanyang20055. 重新执行 Git 推送四、可能遇到的顽固问题1. 弹窗仍然出现手动清理 Windows 凭据管理器2. 无法区分账号时清除全部 GitHub 凭据五、如果你只想为当前仓库明确指定 GitHub 账号六、注意Git 用户名和 GitHub 登录账号不是一回事七、总结参考资料一、问题描述最近在 Windows 上具体来说是 Visual Studio Code 的 Git 功能侧边栏中使用 Git 提交代码时经常弹出一个 GitHub 账号选择窗口如图GitHub Select an account窗口中同时显示两个 GitHub 账号yangdanyang2005 146186406我其实每次都需要选择账号yangdanyang2005但是每次我进行 Git 提交或推送代码时仍然会再次弹出这个提示要求选择非常麻烦。读者也许也遇到了类似的问题。作者已经解决这个问题本文将介绍如何删除不再使用的 GitHub 账号只保留yangdanyang2005将yangdanyang2005设置为 GitHub 默认认证账号解决 VS Code、IDEA 等开发工具反复弹出账号选择窗口的问题。二、问题原因这个窗口并不是 GitHub 网页本身弹出的而是Git Credential ManagerGCM弹出的。Git Credential Manager 是 Git 的凭据管理工具。在使用 HTTPS 地址访问 GitHub 时它会帮助我们完成登录并将认证信息安全地保存到 Windows 凭据管理器中。Git for Windows 通常会自带 GCM。(GitHub Docs)当 GCM 中保存了多个 GitHub 账号而当前 Git 仓库又没有明确指定使用哪个账号时GCM 就可能弹出账号选择窗口让用户手动选择。P.S.git commit只会在本地创建提交本身不需要连接 GitHub。触发 GitHub 登录认证的通常是gitpushgitpullgitfetch如果在 VS Code、IDEA 或其他开发工具中点击“提交”后出现弹窗往往是因为开发工具在提交后自动执行了同步或推送操作。GCM 主要在 HTTPS 远程操作时参与身份认证。(GitHub)三、问题解决方法注以下操作方法均以作者自己的电脑和账号为例请读者根据自己的 Git 配置与账号登录情况修改相应用户名等等。1. 确认当前仓库使用 HTTPS首先进入项目目录执行gitremote-v如果输出类似origin https://github.com/用户名/仓库名.git (fetch) origin https://github.com/用户名/仓库名.git (push)说明当前仓库使用的是 HTTPS本文的方法适用。如果输出类似gitgithub.com:用户名/仓库名.git说明使用的是 SSH问题通常不是由 Git Credential Manager 的 HTTPS 凭据导致的。然后查看当前使用的凭据管理工具gitconfig--getcredential.helper常见输出包括manager或者manager-core这表示当前使用的是 Git Credential Manager。GitHub 官方文档也建议先通过该命令确认当前配置的凭据管理器。(GitHub Docs)2. 查看 Git Credential Manager 中的 GitHub 账号打开以下任意终端Git Bash推荐PowerShellWindows TerminalCMD执行gitcredential-manager github list该命令会列出 Git Credential Manager 中已登录的 GitHub 账号。例如yangdanyang2005 146186406GCM 官方提供了github list、github login和github logout等命令用于管理 GitHub 账号。(GitHub)3. 删除不需要的 GitHub 账号这里需要删除的账号是146186406执行命令gitcredential-manager githublogout146186406执行完成后再次查看账号列表gitcredential-manager github list确认输出中只剩下yangdanyang2005不同版本的 Git Credential Manager 在命令参数上可能略有区别。出现参数无法识别时可以执行gitcredential-manager github--help根据当前版本显示的帮助信息操作。GCM 官方文档同样建议通过该帮助命令查看 GitHub 账号管理方式。(GitHub)4. 设置默认使用 yangdanyang2005删除多余账号后继续设置 GitHub 的默认用户名gitconfig--globalcredential.https://github.com.username yangdanyang2005这条命令的作用是告诉 Git Credential Manager访问https://github.com时默认使用yangdanyang2005账号。GCM 官方推荐通过以下配置格式指定某个远程地址的默认账号credential.URL.username对于 GitHub可以设置为gitconfig--globalcredential.https://github.com.username 用户名(GitHub)设置完成后可以执行下面的命令检查gitconfig--global--getcredential.https://github.com.username正常情况下应输出yangdanyang2005也可以查看该配置来自哪个配置文件gitconfig --show-origin--getcredential.https://github.com.username5. 重新执行 Git 推送进入项目目录执行gitpush作者在这里直接使用的Visual Studio Code 的 Git 功能侧边栏中的相关按钮代替 git 命令来操作的。在这里也推荐大家体验、使用 Visual Studio Code 的 Git 功能侧边栏一些常见的 git 操作会很方便。当然遇到类似于本文等的一些 git 方面的“疑难杂症”可能还是需要你在 Visual Studio Code 下方等处打开 git bash 终端来通过输入命令操作了。这个时候一般就不会出现那个账号选择弹窗了反正作者是没遇到的即问题解决了✅️。我在网上看到有人在进行设置后的第一次推送时系统仍有可能要求重新登录一次此时选择只登录你想要登录的账号即可。登录成功后GCM 会将认证信息保存到 Windows 凭据管理器中之后的 HTTPS Git 操作会重复使用已经保存的凭据。(GitHub Docs)四、可能遇到的顽固问题注作者按照本文第三节所述方法已经成功解决此问题了因此下列可能遇到的“顽固问题”及其可能的应对方法仅供参考。1. 弹窗仍然出现手动清理 Windows 凭据管理器如果执行上述命令后账号146186406仍然出现在窗口中可以直接在 Windows 凭据管理器中删除旧凭据。首先打开凭据管理器。按下Win S搜索凭据管理器也可以按照下面的路径打开控制面板 → 用户账户 → 凭据管理器 → Windows 凭据然后找到 GitHub 相关凭据。在“普通凭据”中查找名称包含以下内容的条目github.com或者git:https://github.com展开凭据查看其中保存的用户名。删除其中你不需要的用户名的凭据。GitHub 官方文档指出如果 Windows 凭据管理器中缓存了错误或过期的 GitHub 凭据可以在“控制面板—用户账户—凭据管理器”中找到 GitHub 条目并将其删除。(GitHub Docs)2. 无法区分账号时清除全部 GitHub 凭据如果 Windows 凭据管理器中看不到明确的账号名称或者无法判断哪一条属于旧账号可以删除全部 GitHub 相关凭据然后重新登录正确账号。1PowerShell 命令在 PowerShell 中执行echoprotocolhttpsnhostgithub.com|git credential-managererase2Git Bash 命令在 Git Bash 中执行printfprotocolhttps\nhostgithub.com\n\n|gitcredential-manager erase该操作会清除当前保存的 GitHub HTTPS 凭据。GitHub 官方文档提供了通过git credential-manager erase清除 GitHub 凭据的方法。(GitHub Docs)清除后重新执行gitpush在弹出的登录窗口中只登录你想要登录的 Github 账号即可。需要注意清除全部凭据后其他使用 HTTPS 的 GitHub 仓库也可能要求重新登录。五、如果你只想为当前仓库明确指定 GitHub 账号如果不希望修改所有项目的全局设置也可以只为当前仓库指定账号。进入项目目录执行gitconfig credential.https://github.com.username yangdanyang2005这里没有使用--global因此配置只写入当前项目的.git/config文件。检查配置gitconfig--getcredential.https://github.com.username输出应为yangdanyang2005也可以直接把账号名加入远程仓库地址。先查看当前地址gitremote get-url origin假设当前地址为https://github.com/yangdanyang2005/example.git可以修改为gitremote set-url origin https://yangdanyang2005github.com/yangdanyang2005/example.git然后检查gitremote-v在 HTTPS 地址中加入用户名可以让 Git 和 GCM 更明确地区分应该使用的身份。GCM 官方文档也提供了这种为特定仓库指定账号的方法。(GitHub)六、注意Git 用户名和 GitHub 登录账号不是一回事有人会尝试通过下面的命令解决账号选择问题gitconfig--globaluser.nameyangdanyang2005gitconfig--globaluser.email你的GitHub邮箱这两个配置确实很重要但它们设置的是Git 提交记录中的作者信息并不能决定推送代码时使用哪个 GitHub 登录账号。可以执行以下命令查看提交作者配置gitconfig--globaluser.namegitconfig--globaluser.email两类配置的区别如下配置作用user.name写入 Git 提交记录的作者名称user.email写入 Git 提交记录的作者邮箱credential.https://github.com.username指定访问 GitHub 时默认使用的认证账号Windows 凭据管理器保存 GitHub 的 OAuth Token 或其他登录凭据GCM 官方文档明确说明user.name和user.email只是提交信息中的字符串GCM 不会通过它们决定 GitHub 登录身份。(GitHub)七、总结Git 反复弹出 GitHub 账号选择窗口通常是因为 Git Credential Manager 中保存了多个 GitHub 账号而当前仓库没有明确指定默认账号。解决思路主要分为三步从 Git Credential Manager 中注销不需要的账号设置credential.https://github.com.username默认用户名必要时删除 Windows 凭据管理器中的旧 GitHub 凭据。汇总操作步骤假设需要保留的账号是yangdanyang2005需要删除的账号是146186406主要需要运行的 git 命令如下# 查看已保存的 GitHub 账号gitcredential-manager github list# 删除不需要的账号gitcredential-manager githublogout146186406# 设置 GitHub 默认账号gitconfig--globalcredential.https://github.com.username yangdanyang2005# 检查默认账号gitconfig--global--getcredential.https://github.com.username# 重新推送gitpush如果仍然出现账号选择窗口则进入 控制面板 → 用户账户 → 凭据管理器 → Windows 凭据删除旧的 GitHub 凭据再执行一次git push最后只登录yangdanyang2005即可。配置完成后Git 在执行push、pull、fetch等远程操作时就会优先使用指定的 GitHub 账号不再反复要求手动选择。参考资料Git Credential Manager多账号配置说明。(GitHub)GitHub 官方文档在 Git 中缓存 GitHub 凭据。(GitHub Docs)GitHub 官方文档管理多个 GitHub 账号。(GitHub Docs)