Git push 总是提示输入用户名密码是因为未启用或配置错误 credential.helper;应根据系统选择 store(不安全)、cache(内存缓存)、manager-core(Windows 推荐)或 osxkeychain(macOS 推荐),避免明文存储和 2FA 冲突。

Git push 总是提示输入用户名密码?先确认 credential helper 是否启用
Git 默认不存密码,每次 push/pull 都要输账号密码,本质是没配好 credential.helper。不是 Git 本身问题,而是凭据管理没打开。
执行这条命令看当前配置:
git config --global credential.helper
如果输出空,说明没启用;如果输出 store 或 cache 或 osxkeychain(macOS)、manager-core(Windows),说明已配但可能失效或不兼容。
-
store:明文存到 ~/.git-credentials,简单但不安全(尤其共用机器) -
cache:内存缓存,默认 15 分钟过期,Linux/macOS 常用,但 Windows 不原生支持 -
manager-core:Windows 推荐,对接系统凭据管理器,加密存储 -
osxkeychain:macOS 推荐,走钥匙串,自动集成
Windows 上用 Git Credential Manager(GCM)最稳
旧版 wincred 已弃用,新版 manager-core 是微软官方维护,支持 GitHub、GitLab、Azure DevOps 等主流平台,且能自动处理 2FA 和 token 刷新。
操作步骤:
- 下载安装最新版 Git Credential Manager(不要用 Git for Windows 自带的老版本)
- 安装后运行:
git config --global credential.helper manager-core
- 首次 push 时会弹系统窗口登录,之后就自动记住了
常见坑:git config --global credential.helper store 在 Windows 上看似能用,但密码明文落盘、不支持 2FA、和 GitHub 的 personal access token 冲突,容易后续 push 失败报 remote: Support for password authentication was removed。
macOS 上别手动写 ~/.git-credentials,优先用钥匙串
虽然 git config --global credential.helper store 能工作,但密码明文存在磁盘,钥匙串更安全也更省心。
确认是否已启用钥匙串:
git config --global credential.helper osxkeychain
如果提示 command not found,说明 Git 版本太老(brew install git)。
钥匙串生效后,第一次 push 输入账号密码,会自动存进「登录」钥匙串,名称通常是 git:https://github.com。之后所有同域名操作都不再提示。
- 删错条目?打开「钥匙串访问」App,搜索
git:,删对应条目即可 - 换 GitHub 账号?删旧条目,下次 push 会重新触发登录
- 用 SSH?那根本不用配 credential,但得确保 remote URL 是
git@github.com:user/repo.git格式
Linux 下 cache 方式最常用,但注意超时和权限
cache 是 Linux 主流方案,但它只在内存里存凭据,关机就丢,也不跨终端进程共享(比如你在 tmux 里 push 登录了,新开个终端还得再登一次)。
启用并延长缓存时间(比如设成 1 小时):
git config --global credential.helper 'cache --timeout=3600'
常见错误现象:git push 仍要输密码,但 git config --global credential.helper 显示是 cache —— 很可能是你用了 sudo git push,导致凭据被存到 root 用户的 cache 里,而你普通用户查不到。
- 永远用当前用户执行 git 命令,避免 sudo
- 想彻底清空缓存?运行:
git credential reject,然后输入两行:protocol=https host=github.com
- 需要持久化?只能退回到
store,但务必 chmod 600 ~/.git-credentials 防止他人读取
多账号场景(比如公司 GitLab + 个人 GitHub)最容易出问题:一个 helper 只能记住一套凭据,换账号必须手动清理旧记录,否则一直用错账号 push。










