辰·技术空间

Git在Windows使用入门

2026/06/08
6
0

这篇文章整理了在 Windows 上从零使用 Git 的完整流程:安装、必要配置、连接 GitHub(SSH 与 HTTPS 两种方式)、日常命令,以及最容易卡住的几类报错。目标很简单——照着做能跑通,出问题时也能快速定位。

本文覆盖:

  • Windows 上安装 Git 与关键安装选项
  • 命令行连接 GitHub(SSH / HTTPS 两种方式)
  • 本地凭据(credential)设置
  • 哪些操作更推荐用 GUI 完成
  • 常用命令速查与常见报错处理

先看懂下面这张图:几乎所有日常命令,都是在这四个区域之间搬运内容。
Git 的四个区域与数据流动


一、Windows 安装 Git

1. 下载

官方下载地址:https://git-scm.com/download/win(会自动给出 Git for Windows 的安装包)。

提示:国内下载慢怎么办

官网在海外,国内下载可能很慢或中断。可改用以下镜像之一:

  • 中科大:https://mirrors.ustc.edu.cn/git/
  • 清华大学:https://mirrors.tuna.tsinghua.edu.cn/git/
  • 阿里云(npmmirror):https://registry.npmmirror.com/binary.html?path=git-for-windows/

也可直接到 GitHub Release 页面下载:https://github.com/git-for-windows/git/releases

2. 安装时几个值得注意的选项

安装向导基本一路 Next 即可,但下面几屏建议留意:

安装步骤推荐选择说明
默认编辑器VS Code(若已装),否则用 Vim提交时弹出的编辑器,新手用 VS Code 更友好
默认分支名main与 GitHub 默认保持一致
PATH 环境变量Git from the command line and also from 3rd-party software让 cmd / PowerShell / 其他软件都能调用 git
HTTPS 传输后端OpenSSL一般默认即可
换行符处理Checkout Windows-style, commit Unix-styleautocrlf=true,Windows 上的推荐设置
凭据管理器Git Credential Manager关键项,负责记住 GitHub 账号,省去每次输密码

注意:换行符(CRLF / LF)

Windows 用 CRLF,Linux / macOS 用 LF。团队协作里换行符不统一,会导致整文件被标记为改动的"假 diff"。Windows 上推荐 autocrlf=true,详见下文配置。

3. 验证安装

安装完打开 Git Bash 或 PowerShell:

git --version

能打印出版本号即成功。Git for Windows 自带的 Git Bash 是一个类 Unix 终端,后面的命令在它里面运行最省心。


二、初次使用的全局配置

重要:装好后第一件必做的事

配置提交身份。下面这两行决定了每次提交记录里"作者是谁",必须最先设置。注意它只是写进提交记录的署名信息,和后面登录 GitHub 的认证是两回事——它不会让你获得推送权限,推送权限由第三章的 SSH 或 PAT 决定。

# 设置提交署名:用户名 + 邮箱(建议用 GitHub 注册邮箱)
git config --global user.name "你的名字"
git config --global user.email "you@example.com"

# 以下均为可选项
# 默认分支名设为 main
git config --global init.defaultBranch main
# Windows 推荐的换行符处理
git config --global core.autocrlf true
# 设置默认编辑器为 VS Code
git config --global core.editor "code --wait"
# 让中文文件名正常显示,而不是一串八进制转义
git config --global core.quotepath false

查看与定位配置:

git config --list              # 查看所有生效的配置
git config --global --edit     # 直接打开全局配置文件编辑
git config user.email          # 查看某一项

说明:配置的三个层级

--system(整机)< --global(当前用户,文件在 C:\Users\你\.gitconfig)< 仓库本地(项目目录的 .git/config)。范围越小,优先级越高。


三、连接 GitHub(命令行)

有两种主流方式,选一种即可。SSH 一次配置长期免密;HTTPS 配合凭据管理器在 Windows 上几乎零配置。两者都很常用。
连接 GitHub 的两种方式

方式 A:SSH(推荐长期使用)

1. 生成 SSH 密钥

ssh-keygen -t ed25519 -C "you@example.com"

一路回车即可(密钥默认存到 C:\Users\你的用户名\.ssh\id_ed25519,passphrase 可留空)。

老系统不支持 ed25519 时,改用 ssh-keygen -t rsa -b 4096 -C "you@example.com";此时密钥文件名为 id_rsaid_rsa.pub,同样位于 .ssh 文件夹下。

2. 查看并复制公钥

密钥生成后,会在 C:\Users\你的用户名\.ssh\ 下得到两个文件:

  • id_ed25519 —— 私钥,绝不外传,留在本机
  • id_ed25519.pub —— 公钥,要贴到 GitHub 上的就是它

打开 id_ed25519.pub,把里面一整行内容复制下来,两种方式任选:

  • 用记事本打开:在文件资源管理器进入 C:\Users\你的用户名\.ssh\,右键 id_ed25519.pub,用记事本打开后全选复制。

  • 或在 Git Bash 里打印出来再手动复制:

    cat ~/.ssh/id_ed25519.pub
    

内容形如 ssh-ed25519 AAAA... you@example.com

注意:只复制 .pub 公钥

千万不要把没有 .pub 后缀的私钥贴出去。

3. 在 GitHub 上添加公钥

打开设置页面(需登录):https://github.com/settings/keys

New SSH key,Title 随便填(如"我的笔记本"),在 Key 框里粘贴刚才的公钥,再点 Add SSH key

页面路径也可手动找到:GitHub 右上角头像 → Settings → SSH and GPG keys → New SSH key。

4. 测试连接

ssh -T git@github.com

说明:首次连接会询问"主机指纹"

第一次连 GitHub,SSH 会提示这台主机不在已知列表里,显示一段指纹并询问:

The authenticity of host 'github.com (...)' can't be established.
ED25519 key fingerprint is SHA256:...
Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入 yes 回车即可。这是正常步骤,只在第一次出现,它会把 GitHub 记进 known_hosts

看到 Hi 用户名! You've successfully authenticated... 就成功了。之后克隆 / 推送使用 SSH 地址:

git clone git@github.com:用户名/仓库名.git

方式 B:HTTPS + 个人访问令牌(PAT)

说明:这种方式不涉及 SSH

走 HTTPS 就不用生成密钥、不用贴公钥,也没有上面的主机指纹确认。只需要一个令牌(PAT),再让 Windows 凭据管理器记住它即可。

注意:GitHub 已不支持账号密码做 Git 操作

用 HTTPS 时,密码位置要填 Personal Access Token(PAT),而不是登录密码。

1. 生成 PAT

GitHub 网页路径:Settings → Developer settings → Personal access tokens → Tokens (classic) → Generate new token,勾选 repo 权限,生成后立即复制保存(只显示一次)。

2. 首次推送时输入

用 HTTPS 地址克隆 / 推送时会弹出登录框(或命令行提示):用户名填 GitHub 用户名,密码处粘贴刚才的 PAT。

git clone https://github.com/用户名/仓库名.git

输入一次后,Git Credential Manager 会帮你记住,后续不再询问。

从 GitHub 页面获取一个项目(克隆 / 下载)

打开任意仓库主页,点绿色的 Code 按钮,会看到三种取法:

方式怎么做适合
HTTPS 克隆Code → Local → HTTPS,复制 https://github.com/...git用方式 B(PAT)的人
SSH 克隆Code → Local → SSH,复制 git@github.com:....git已配好方式 A(SSH)的人
下载 ZIPCode → Download ZIP只想要代码、不打算用 Git 跟踪

克隆(会保留 Git 历史,可后续 pull / push):

git clone <复制来的地址>

提示:克隆 vs 下载 ZIP

克隆得到的是一个完整 Git 仓库,能拉取更新、提交、推送;下载 ZIP 只是某一刻的代码快照,没有 .git,无法用 Git 命令同步。想参与开发就用克隆。


四、本地凭据设置(让本机记住 GitHub 账号)

这一章只解决一个问题:用 HTTPS 时不必每次都输 PAT。(用方式 A SSH 的人基本可以跳过本章。)

安装 Git for Windows 时勾选的 Git Credential Manager(GCM) 会自动处理这件事:

  • 第一次用 HTTPS 推送 / 拉取时,会弹窗或提示你登录(输 PAT 或浏览器授权);
  • 之后 GCM 把凭据安全存进 Windows 系统的「凭据管理器」,后续操作自动带上,不再询问。

通常什么都不用配。只在出问题时才需要下面这两条:

# 查看当前用的凭据助手(正常会显示 manager)
git config --global credential.helper

# 万一没生效,手动指定为 GCM
git config --global credential.helper manager

提示:换了账号 / 想重新登录

打开 Windows 搜索「凭据管理器」→「Windows 凭据」,找到 git:https://github.com 删除,下次操作会重新要求登录。


五、推荐在 GUI 上执行的操作

命令行高效,但有些操作用图形界面更直观、更不容易出错。常用 GUI 有:GitHub Desktop、Sourcetree、VS Code 内置 Git 面板、GitKraken、TortoiseGit。

GUI 更适合做这些

  • 解决合并冲突:三方对比界面直接挑选保留哪边,比命令行手动编辑冲突标记清晰得多。
  • 查看历史与 diff:浏览提交图、分支走向、逐行改动,GUI 一目了然。
  • 交互式 rebase / 整理提交:拖拽调整顺序、合并(squash)、改写提交信息,可视化操作不易出错。
  • 挑选要暂存的具体行(hunk staging):VS Code / Sourcetree 里勾选某几行加入暂存区,比 git add -p 直观。
  • 撤销 / 回退某次提交:对着提交图右键操作,降低误删风险。
  • 管理分支、查看远程状态:分支多时图形化更省脑。

命令行更适合

批量 / 脚本化操作、远程服务器无图形界面、需要精确控制的场景,仍然首选命令行。多数人的习惯是:GUI 看历史和解冲突,命令行做日常提交推送,两者混用。


六、常用命令速查

创建 / 克隆仓库

git init                       # 当前目录初始化为 Git 仓库
git clone <url>                # 克隆远程仓库
git clone <url> 目录名          # 克隆到指定目录

查看状态与差异

git status                     # 查看当前改动状态
git diff                       # 工作区 vs 暂存区的改动
git diff --staged              # 暂存区 vs 上次提交的改动
git log --oneline --graph --all  # 精简的图形化提交历史

暂存与提交

git add 文件名                  # 暂存指定文件
git add .                      # 暂存所有改动
git add -p                     # 交互式选择要暂存的片段
git commit -m "提交说明"        # 提交
git commit -am "说明"           # 已跟踪文件:暂存 + 提交一步完成
git commit --amend             # 修改上一次提交(信息或内容)

分支操作

分支与合并

git branch                     # 列出本地分支
git branch <名>                 # 新建分支
git switch <名>                 # 切换分支(新语法)
git switch -c <名>              # 新建并切换
git checkout <名>               # 切换分支(老语法,仍常用)
git merge <名>                  # 把指定分支合并到当前分支
git branch -d <名>              # 删除分支

远程仓库

git remote -v                  # 查看远程地址
git remote add origin <url>    # 添加远程仓库
git remote set-url origin <url># 修改远程地址

拉取与推送

git fetch                      # 抓取远程更新(不合并)
git pull                       # 抓取并合并(= fetch + merge)
git push                       # 推送当前分支
git push -u origin main        # 首次推送并建立追踪关系
git push origin --delete <名>   # 删除远程分支

撤销与回退

git restore 文件名              # 丢弃工作区改动(新语法)
git restore --staged 文件名     # 取消暂存(保留改动)
git reset --soft HEAD~1        # 撤销上次提交,改动留在暂存区
git reset --hard HEAD~1        # 撤销上次提交并丢弃改动(慎用)
git revert <commit>            # 用一次新提交来撤销某次提交(安全,适合已推送的)

警告:reset --hard 不可逆

--hard 会直接丢弃改动。推送前的本地操作还能靠 git reflog 找回,但养成习惯前请先确认没有未保存内容。

储藏(暂存现场)

git stash                      # 临时收起当前改动(同步进度时有时需要)
git stash list                 # 查看储藏列表
git stash pop                  # 恢复最近一次储藏并删除记录
git stash apply                # 恢复但保留记录

标签

git tag                        # 列出标签
git tag v1.0.0                 # 打轻量标签
git tag -a v1.0.0 -m "说明"     # 打带注释标签
git push origin v1.0.0         # 推送指定标签
git push origin --tags         # 推送所有标签

七、常见报错与处理

看到报错先别慌,大多是下面这几种:

报错(关键字)原因解决
fatal: not a git repository当前目录不是 Git 仓库cd 进项目目录,或先 git init
Permission denied (publickey)SSH 公钥没加到 GitHub 或未生效重新执行 ssh -T git@github.com 排查;确认公钥已加到 https://github.com/settings/keys
Support for password authentication was removed / Authentication failedHTTPS 用了登录密码而非 PAT,或 PAT 过期改用 PAT;在 Windows 凭据管理器删掉旧的 git:https://github.com 后重登
failed to push some refs / Updates were rejected(non-fast-forward)远程有你本地没有的提交git pull 合并,再 git push
Your branch and 'origin/main' have diverged本地和远程各自有新提交git pull(必要时 git pull --rebase)解决后再推
CONFLICT (content): Merge conflict in ...合并 / 拉取产生冲突打开文件处理 <<<<<<< ======= >>>>>>> 标记,留下想要的内容,再 git add + git commit(推荐用 GUI 解,见第五章)
error: Your local changes would be overwritten by merge有未提交改动挡住了合并git commitgit stash 收起改动,再操作
fatal: remote origin already existsorigin 已存在git remote set-url origin <新地址> 修改,而不是再 add
fatal: refusing to merge unrelated histories本地新仓库去连一个已有 README 的远程仓库,两边历史无关git pull origin main --allow-unrelated-histories
warning: LF will be replaced by CRLF换行符自动转换的提示不是错误,可忽略;由第二章的 core.autocrlf 控制

万能急救

  • 不确定当前状态时,先 git status,它的提示里常常直接给了下一步命令。
  • 提交搞乱了想反悔,先别急着 reset --hard,用 git reflog 找回历史。

八、常见小技巧

.gitignore

在仓库根目录建 .gitignore,写入不想被 Git 跟踪的文件 / 目录(如 node_modules/.env*.log)。模板参考:https://github.com/github/gitignore

reflog 是后悔药

几乎所有"丢失"的提交都能用 git reflog 找回,它记录了 HEAD 的每一次移动。

让已经误传的文件重新被忽略

.gitignore 只对"还没被跟踪"的文件生效。如果文件在加进 .gitignore 之前就已经提交过(比如不小心传了 .env),需要先把它从 Git 的跟踪里移除。

只取消跟踪指定文件 / 目录(推荐,影响最小):

git rm --cached 文件名          # 单个文件
git rm --cached -r 目录名/      # 整个目录
git commit -m "停止跟踪 xxx"

或按 .gitignore 一次性重整所有已跟踪文件:

git rm -r --cached .           # 从索引移除全部(本地磁盘文件不动)
git add .                      # 重新添加,会自动跳过 .gitignore 里的文件
git commit -m "Apply .gitignore"

三点注意:

  • --cached 只把文件移出 Git 跟踪,本地磁盘上的文件不会被删除
  • 这是一次"删除"提交,协作者 pull 后该文件会从他们的工作区消失,记得知会一声。
  • 不会清除历史。若误传的是密码 / 密钥等敏感信息,旧提交里仍能翻到,需用 git filter-repo 或 BFG 重写历史,并立即作废已泄露的凭据。

相关链接

  • Git 官方文档:https://git-scm.com/doc
  • Pro Git 中文书(免费):https://git-scm.com/book/zh/v2
  • GitHub 官方文档:https://docs.github.com