新电脑第一次
适用:新电脑第一次装 Git、连 GitHub。以 Windows 为主,macOS/Linux 差异处单独标注。
一、先搞懂概念:Git 和 GitHub 是什么
| Git | GitHub | |
|---|---|---|
| 是什么 | 分布式版本控制工具(本地软件) | 基于 Git 的代码托管平台(网站) |
| 作用 | 本地记录文件的每次修改,可回滚、开分支 | 代码存云端,备份、多人协作 |
| 关系 | 没有 Git 就没有 GitHub | GitHub 只是"远程仓库"之一(还有 Gitee、GitLab) |
一句话:Git 管本地版本,GitHub 管远程托管。装好 Git 后还要配置身份和认证,才能和 GitHub 通信。
二、安装 Git
Windows
方式一:官网安装包(最稳)
-
打开 https://git-scm.com/download/win 下载 64-bit 版
-
双击安装,一路 Next,注意这几项建议:
- Select Components:勾选 Git Bash Here / Git GUI Here(右键菜单快捷入口)
- Default branch name:选
main(或保持默认,稍后用命令改) - Adjusting your PATH:选默认 "Git from the command line and also from 3rd-party software"
- Line ending conversions:Windows 保持默认(Checkout Windows-style,即 core.autocrlf=true,避免换行符问题)
-
装完打开任意终端(PowerShell / CMD / Git Bash),验证:
git --version
方式二:winget(命令行一条装完)
winget install --id Git.Git -e --source winget
官网下载慢可换清华大学镜像:https://mirrors.tuna.tsinghua.edu.cn/github-release/git-for-windows/git/,选最新版 Assets 里的 .exe。
macOS
xcode-select --install # 安装 Command Line Tools(自带 Git)
# 或已装 Homebrew 的话:brew install git
Linux(Debian/Ubuntu)
sudo apt update && sudo apt install git
验证安装
git --version # 例:git version 2.4x.x.windows.1
三、首次配置身份(必做)
Git 每次提交都要记录"谁改的",所以必须告诉它名字和邮箱。邮箱建议用 GitHub 注册邮箱,这样提交会自动关联到你的账号。
git config --global user.name "你的名字"
git config --global user.email "你的GitHub邮箱@example.com"
推荐一起配的:
git config --global init.defaultBranch main # 新仓库默认分支叫 main
git config --global credential.helper manager # Windows 凭据管理器(Git for Windows 自带,自动记住 Token/密码)
查看当前全部配置:
git config --global --list
配置保存在用户目录的
.gitconfig文件里,改错重跑命令覆盖即可。
四、连接 GitHub:两种认证方式
GitHub 从 2021 年起已不支持密码推送 ,必须用 SSH 密钥或 Token。二选一,推荐 SSH。
方式 A:SSH 密钥(推荐,一次配好长期用)
1. 检查是否已有密钥
ls ~/.ssh
已有 id_ed25519 / id_rsa 且不想换,可跳过生成,直接用旧公钥。
2. 生成新密钥
ssh-keygen -t ed25519 -C "你的GitHub邮箱@example.com"
一路回车即可(也可以设 passphrase,更安全,但每次用要输;可配合 ssh-agent 免输)。
3. 查看并复制公钥
# Windows PowerShell:
type $env:USERPROFILE\.ssh\id_ed25519.pub | clip
# Git Bash / macOS / Linux:
cat ~/.ssh/id_ed25519.pub
4. 添加到 GitHub
GitHub → 右上角头像 → Settings → 左侧 SSH and GPG keys → New SSH key → Title 填个标识(如 "新电脑")→ Key 粘贴公钥 → Add SSH key。
5. 测试连接
ssh -T git@github.com
看到 Hi 你的名字! You've successfully authenticated, but GitHub does not provide shell access. 即成功。
方式 B:HTTPS + Personal Access Token(临时/偶尔用)
- GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic) → Generate new token
- 勾选
repo权限,生成后立刻复制保存(只显示一次,丢了要重新生成) - clone 用 HTTPS 地址;推送时用户名填 GitHub 用户名,密码框填 Token
国内网络问题:连 GitHub 慢/失败
22 端口被干扰时改用 443 端口。编辑 ~/.ssh/config(没有就新建):
Host github.com
Hostname ssh.github.com
Port 443
User git
再跑 ssh -T git@github.com 验证。
五、第一次跑通流程(clone → 改 → 提交 → 推送)
以把 GitHub 上的仓库克隆到新电脑为例:
git clone git@github.com:用户名/仓库名.git # SSH 方式
# 或
git clone https://github.com/用户名/仓库名.git # HTTPS 方式
cd 仓库名
# ......修改文件......
git status # 看哪些文件变了
git add . # 暂存所有改动
git commit -m "描述改了什么" # 本地提交
git push # 推送到 GitHub
新仓库第一次推送要指定上游分支:
git push -u origin main
日常拉取远程最新改动:
git pull
六、常用辅助
- GitHub Desktop :官方图形界面客户端,不熟命令行的场景适用(https://desktop.github.com),登录后自动接管 clone/push,配置好 SSH 后同样可用
- 多账号管理 :在
~/.ssh/config里用不同Host别名区分不同 GitHub 账号,配合各自的密钥文件 - 图形查看历史 :VS Code 自带 Git 面板,或
gitk/ Git GUI
七、Git 基础操作
7.1 核心概念:三个区
工作区(你正在编辑的文件) → git add → 暂存区(staging) → git commit → 版本库(本地历史) → git push → 远程仓库(GitHub)
- 工作区:你看到的、正在编辑的文件
- 暂存区 :
add进去、准备打包提交的改动 - 版本库 :
commit后的历史记录(存在.git目录里)
每次提交都是三步曲:改文件 → add → commit。只有 commit 过的改动才算进入版本历史,才能 push。
7.2 日常提交
git status # 先看状态:哪些文件改了、哪些已暂存
git diff # 看工作区改了什么(未暂存的部分)
git diff --staged # 看暂存区改了什么(add 之后、commit 之前)
git add 文件名 # 只暂存某个文件
git add . # 暂存所有改动(提交前先 status 确认,别把不该提交的加进来)
git commit -m "说明" # 提交,信息写清"做了什么",别写 update/111
git log --oneline # 看提交历史,一行一条
提交信息写错了且还没 push:
git commit --amend -m "新的说明" # 改写最近一次提交
7.3 分支(Git 最核心的能力)
分支 = 独立的开发线,互不干扰。开发新功能、修 bug 都建议开分支,做完再合并回主分支。
git branch # 查看本地分支(* 表示当前所在)
git branch 新分支名 # 新建分支
git switch 分支名 # 切换分支(老命令:git checkout 分支名)
git switch -c 新分支名 # 新建并切换(等价 git checkout -b)
git branch -d 分支名 # 删除已合并的分支
典型流程:
git switch -c feature/登录页 # 开功能分支
# ......开发、提交......
git switch main # 切回主分支
git merge feature/登录页 # 合并
git branch -d feature/登录页 # 合并完删掉
7.4 合并与冲突
-
git merge 分支名:把另一个分支的改动合到当前所在分支 -
冲突:两个分支改了同一处,Git 无法自动决定,会停下来让你手动处理。冲突文件里会出现标记:
<<<<<<< HEAD
当前分支的内容被合并分支的内容
feature/登录页
处理三步:
- 打开文件,手动保留想要的 ,删掉
<<<<<<</=======/>>>>>>>三行标记 git add 冲突文件git commit(不带 -m 用默认合并说明)
不想合并了:git merge --abort 退回合并前。
7.5 撤销与回滚(按阶段选命令)
| 场景 | 命令 | 效果 |
|---|---|---|
| 工作区改乱了想放弃 | git restore 文件名 |
丢弃未暂存改动(不可找回) |
| 已 add 没 commit,想撤出暂存 | git restore --staged 文件名 |
退回工作区,内容保留 |
| 已 commit 没 push,想撤销 | git reset --soft HEAD~1 |
撤销提交,改动留在暂存区 |
| 已 push,想反悔 | git revert 提交号 |
生成一个反向提交,安全 |
| 手头改动没做完,想先干别的 | git stash / git stash pop |
临时收起 / 取回改动 |
红线 :
reset会改写历史,只对未推送 的提交用;已推送的必须用revert,否则队友拉取会乱。
7.6 远程协作
git clone <地址> # 首次把远程仓库整个拉下来
git pull # 拉取远程最新改动(fetch + merge,相当于同步)
git fetch # 只下载不合并,先看看远程有什么
git push # 把本地提交推上去
git remote -v # 查看远程仓库地址
git push -u origin main # 首次推送,绑定上游分支
- 每次 push 前先
git pull,避免 rejected(见排查表) - pull 时遇到冲突按 7.4 处理
7.7 忽略文件:.gitignore
仓库根目录建 .gitignore,写进去的文件/目录不会被提交。密钥、临时文件、依赖包必须忽略:
# 示例
node_modules/
config.local.json
*.log
.DS_Store
已提交过的文件加进 .gitignore 不会生效,要先
git rm --cached 文件名把它移出版本管理(文件本身还在)。
7.8 命令速查表
| 操作 | 命令 |
|---|---|
| 查看状态 | git status |
| 查看改动 | git diff / git diff --staged |
| 暂存 | git add 文件 / git add . |
| 提交 | git commit -m "说明" |
| 看历史 | git log --oneline |
| 新建并切换分支 | git switch -c 分支名 |
| 合并 | git merge 分支名 |
| 放弃工作区改动 | git restore 文件 |
| 撤销最近提交(未推送) | git reset --soft HEAD~1 |
| 反悔已推送提交 | git revert 提交号 |
| 临时收工 | git stash / git stash pop |
| 拉取 | git pull |
| 推送 | git push |
八、常见报错排查
| 报错 / 现象 | 原因 | 解决办法 |
|---|---|---|
| Permission denied (publickey) | SSH 公钥没加或加错 | 重走第四步,确认 ssh -T git@github.com 通过 |
| Support for password authentication was removed | 还在用密码推送 | 改用 PAT 或 SSH 密钥 |
| fatal: unable to access 'https://...' | 网络不通 / 代理问题 | 检查网络,配代理或改用 SSH |
| remote: Repository not found | 仓库不存在 / 没权限 | 确认仓库名大小写、是否已加协作者 |
| ! rejected (fetch first) | 本地落后于远程 | 先 git pull 再 git push |
| 提交记录不显示头像 | 邮箱与 GitHub 注册邮箱不一致 | 改 user.email 为注册邮箱 |
九、新电脑配置清单(完成后逐项打勾)
-
git --version有输出(Git 装好) -
git config已设置 user.name / user.email -
~/.ssh里有密钥,公钥已添加到 GitHub -
ssh -T git@github.com显示认证成功 - 试 clone 一个自己的仓库,修改后 push 成功