git凭证新理解

先分清两个极易混淆概念(90% 人踩坑)

user.name/user.email:提交者身份(写进 commit 记录里,谁提交代码) 远程仓库账号密码 / Token:推送拉取代码时,远程仓库鉴权身份(能不能访问仓库) 两者互相独立!只改其一没用,必须两套全部清理重置。

核心坑点预警

Git 配置优先级:仓库本地配置(local) > 全局配置(global) 哪怕你设置了全局自己的账号,如果某个项目 .git/config 里面还保留别人的配置,提交依旧显示别人名字!

完整分步操作(Windows 电脑,别人用过的 Git,重置成你自己账号)

第一步:清理旧配置,设置你自己的【提交姓名 + 邮箱】

打开 Git Bash / CMD / IDEA Terminal

1. 先删除旧全局配置(别人的账号)

复制代码
# 删除全局旧用户名、邮箱
git config --global --unset user.name
git config --global --unset user.email

2. 设置你自己的全局信息(本机所有新项目默认使用)

复制代码
git config --global user.name "你的姓名/昵称"
git config --global user.email "你的gitee/github注册邮箱"

3. 【重点!】处理电脑上已经存在的旧本地仓库

别人之前克隆下来的项目,每个仓库内部可能单独写了 local 配置,会覆盖全局! 两种方案任选:

方案 A(逐个仓库清理,保留项目代码)

进入项目根目录执行:

复制代码
# 删除当前仓库独立配置的用户名邮箱
git config --local --unset user.name
git config --local --unset user.email

执行完成后,这个仓库就会自动使用上面设置的全局账号。

方案 B(最干净,推荐)

旧项目全部删除,之后重新用你自己账号 clone,从根源不存在旧配置。

4. 验证配置是否生效

复制代码
# 查看当前生效的名字(在任意项目内执行)
git config user.name
git config user.email
# 查看所有配置+来源文件,一眼看到哪里还有旧配置
git config --list --show-origin

第二步:清除系统缓存的【远程登录凭证】(https 协议必做)

别人电脑大概率保存了旧账号密码 / Token,push/pull 的时候 Git 自动用旧账号登录,报 403 权限错误。

Windows 操作方式

  1. 左下角搜索:凭据管理器 → 打开
  2. 选择 Windows 凭据
  3. 在普通凭据列表找到所有 git:shturl.cc/DvPqNlL / git:https://github.com 这类条目
  4. 全部删除

下次执行 git push /pull,会自动弹出登录框,输入你自己的账号 + 个人令牌,系统会保存你的新凭证。

命令快速清除(可选)

复制代码
# 删除对应域名缓存凭证,示例gitee
echo "host=shturl.cc protocol=https" | git credential-manager erase

⚠️ 如果你们使用 SSH 方式拉取代码 上面凭据管理器无效,需要:

  1. 删除旧的 C:\Users\用户名\.ssh 下旧的私钥 id_rsa
  2. 生成你自己的 ssh 密钥,公钥上传到 Gitee/GitLab

第三步:额外 IDEA 注意事项

  1. IDEA 本身不会单独存储 git 用户信息,完全依赖系统 Git 配置;
  2. 如果之前使用 IDEA 记住密码,清理完系统凭据管理器即可;
  3. 不要在 IDEA 每个项目单独设置 git user,尽量统一使用全局配置。

极简总结流程(照着顺序执行)

  1. 删除全局旧 name、email → 设置你自己的全局 name、email
  2. 对电脑现存所有 git 项目,删除项目内 local user 配置(或者直接删项目重克隆)
  3. 打开 Windows 凭据管理器,删除所有 git 相关旧登录凭据
  4. 测试:新建文件 commit,查看提交者信息;push 代码,弹出登录框输入你的账号

常见误区澄清

  1. ❌ 改完全局配置就万事大吉 ✅ 老项目里面 .git/config 的本地配置优先级更高,会覆盖全局,必须清理
  2. user.name = 远程仓库登录账号 ✅ 完全无关 user.name 只是提交记录显示的名字;远程登录账号是另外一套凭证!
  3. ❌ 修改配置后,历史提交记录名字会变不会!只能影响以后新的 commit;历史已经提交的记录永久不变。 如果你想要修改历史所有提交者姓名,需要额外 git filter-repo 脚本。

核心答案先说清楚

是的,逻辑就是这样,但有不少细节要区分开:

1. 存储时机

当你使用 HTTPS 协议 git push / pull / fetch,第一次在 IDEA / Git Bash 输入账号密码(或者个人访问令牌 Token)之后: Git Credential Manager(GCM,现代 Git 自带的凭证管理器)会把账号凭证存入 Windows 凭据管理器 → Windows 凭据 → 普通凭据

IDEA 本身不保存密码,IDEA 只是调用系统 Git,存储密码这件事是 Git 交给系统凭证管理器完成的

2. 匹配规则(重点)

凭据条目格式:git:shturl.cc/Hl156c2 / git:https://github.com Git 在访问远程地址时:

  1. 解析远程仓库地址的域名 例如远程地址 shturl.cc/Hl156c2/aaa/test.git → 域名 shturl.cc
  2. 去凭据管理器查找前缀匹配 git:shturl.cc/Hl156c2 的条目
  3. 如果找到 → 自动拿出账号密码,不再弹窗;找不到 → 弹出登录框

同一个域名下所有仓库,共用这一条凭证! 举例子:

❌ 如果远程地址域名不一样,就需要多条凭据: shturl.ccgithub.com 是两条独立凭据,互不通用。

3. 容易踩坑的两种情况

情况 A:一个域名切换账号(高频问题)

比如之前用 A 账号登录 gitee,凭据管理器存了 A 账号;现在想换成 B 账号推送。 仅仅修改 Git 本地 user.name 没用! Git 依然会自动读取旧凭据,推送报 403 权限拒绝。 👉 解决:手动删掉这条 git:shturl.cc/Hl156c2 凭据,下次推送重新输入你的新账号。

情况 B:远程地址带端口、子路径,导致匹配失效

极少数场景远程地址格式特殊,会生成多条不同前缀的凭据,遇到推送依旧弹窗,直接全部删除即可。

4. SSH 协议不受这个影响

⚠️ 如果你项目远程地址是 git@shturl. 这种 SSH 格式: 完全不走 Windows 凭据管理器! 身份认证依靠 C:\Users\你的用户名\.ssh 下的私钥文件,和这里的普通凭据无关。

5. 补充区分两套东西(再次巩固你之前的知识点)

  1. user.name / user.email 写入 commit 提交记录的作者名字邮箱,和登录凭证无关,不参与远程鉴权
  2. Windows 凭据管理器里 git 条目 HTTPS 推拉代码时,给远程仓库做身份校验的账号密码 / Token

极简总结

IDEA 执行 push 触发 Git 请求 → Git 发现缺少凭证 → 弹窗让你输入账号 → Git 调用系统凭证管理器保存域名对应的账号信息; 后续访问相同域名下任意仓库,Git 自动读取这条凭据,无需重复输入。 想要切换账号,删除对应域名那条 git 凭据即可。

核心结论

默认行为:同一个域名,优先复用一条凭证;但并不是强制只能存在一条,可以有多条,只是匹配规则有优先级。

额外区分

再次重申不要混淆:

  • Windows 凭据:HTTPS 推拉代码鉴权身份(登录仓库用)
  • git config user.name提交记录显示的作者(写到 commit 里) 二者完全独立。

一句话总结

同域名物理上可以存放多条凭证 ,依靠 URL 路径区分; 如果你只有一条不带路径的域名凭据,那域名下全部仓库强制共用这一个账号。

直接给结论

是的!只要旧账号本身拥有这个仓库的推送权限,哪怕你本地修改了 user.name/user.email,代码依旧可以正常 push 成功。

核心命令

Git 分支上游 & push/pull 全套命令总结(结合你前面所有问题)

一、查看上游绑定

复制代码
# 查看所有本地分支 + 上游跟踪信息(最实用)
git branch -vv

# 查看远程仓库列表
git remote -v

二、设置上游(2 种方式)

方式 1:推送同时绑定(首次推送新分支最常用)

复制代码
# 本地dev推送到 origin/dev,并绑定上游
git push -u origin dev

# 本地dev推送到 company/dev,并绑定上游(远程不是origin同样生效)
git push -u company dev

# 本地dev → 远程origin/test 【本地远程分支名不一致】
git push -u origin dev:test

-u = --set-upstream;重复执行可以覆盖旧上游

方式 2:只修改上游,不推送代码(远程分支已存在时使用)

复制代码
# 格式:git branch --set-upstream-to=远程名/远程分支 本地分支
git branch --set-upstream-to=company/dev dev

三、解绑上游跟踪

复制代码
git branch --unset-upstream dev

解绑后直接 git push 会报错:缺少上游分支

四、git push 核心行为

复制代码
# 分支已经配置上游 → 自动推向上游(不管远程是origin还是company)
git push

# 显式指定远程+分支(不依赖上游,不会修改上游配置)
git push origin dev

# 同名简写等价:git push origin dev:dev
# 不同名推送:本地dev → 远程origin/release
git push origin dev:release

⚠️ 无上游时,裸命令 git push 直接报错,不会自动创建远程分支

五、git pull 核心行为

复制代码
# 自动拉取当前分支绑定的上游分支并合并
git pull

# 显式指定远程,不读取上游
git pull origin dev

六、git fetch 重点(特殊规则!不跟随上游)

复制代码
# 不带参数:固定只拉取 origin,不受当前分支上游影响
git fetch

# 拉取指定远程(例如company)
git fetch company

# 一次性拉取所有远程仓库
git fetch --all

七、修改远程仓库地址

复制代码
git remote set-url origin https://xxx.git

八、快速记忆关键规则

  1. origin 只是约定名称,不是 Git 硬编码关键字;
  2. 上游 upsteam 是【每个本地分支独立配置】,各分支可以指向不同远程;
  3. git push / git pull 不带参数:完全依靠分支上游配置;
  4. git fetch 不带参数:固定默认 origin;
  5. -u 不止首次可用,重复执行能够覆盖切换上游;
  6. 只写单个分支名 = 本地与远程分支同名映射 ;名称不一样必须用 本地:远程 冒号格式。

对应 IDEA 映射

弹窗 dev → origin:dev 等价:本地 dev 上游 origin/dev,点击 Push 等价 git push 新分支首次推送,IDEA 默认勾选 Set upstream = 命令 -u

相关推荐
阿里云大数据AI技术11 小时前
Daft 多模态视频抽帧性能优化实践:从抽帧到大模型打标,一条视频理解流水线是怎么跑起来的
大数据·人工智能·spark
笨鸟先飞,勤能补拙11 小时前
从预测到决策:人工智能与机器学习的系统方法、工程闭环与现实边界
大数据·人工智能·windows·python·机器学习·密码学
tech讯息11 小时前
生成式 AI 从 POC 验证迈向正式生产,推理部署环节成为卡点的核心原因是什么?
大数据·人工智能
Aethir11 小时前
第三章 — 成本与经济模型
大数据·人工智能
逐米时代12 小时前
数智精益运营:量化验证让每个改善措施有数据说话
大数据
阿里云大数据AI技术12 小时前
免费领票!9月22日-24日,2026云栖大会杭州见
大数据·人工智能·agent
mifengxing13 小时前
文件逻辑结构、物理结构与磁盘空闲存储空间管理
大数据·linux·运维·操作系统·计算机408
听你说3213 小时前
智亮苍南・绿动未来!中节能晶和科技打造浙南县域智慧照明示范样板
大数据·运维·人工智能·科技
CIO_Alliance13 小时前
AI基础系列(1)| 向量、矩阵、张量在AI中分别扮演什么角色?
大数据·人工智能·线性代数·ai·矩阵·企业cio联盟·企业级ai化转型
doitnow200014 小时前
2026淘宝运营机构课程体系怎么比较?
大数据·人工智能