Git 操作教学
Git 使用说明与常见问题排查手册
适用对象:刚开始使用 Git、GitHub、VS Code 可视化 Git 的个人项目维护者。
推荐使用场景:个人博客、前端项目、文档项目、vibe coding 需要强版本管理的项目。
目录
基础概念
搭建环境
进阶使用
常见故问题
项目实操
最简语法
1. Git 是什么
Git 是一个版本管理工具,用来记录项目文件的变化。
你可以把 Git 理解成:
项目文件的时间机器
它可以帮助你做到:
- 保存每一次修改记录
- 查看哪里改了
- 回到之前的版本
- 把本地代码上传到 GitHub
- 多台电脑之间同步项目
- 多人协作开发
GitHub 是一个远程代码托管平台。Git 是工具,GitHub 是远程仓库网站。
Git:本地版本管理工具
GitHub:远程仓库存放平台
VS Code:编辑器,可以可视化操作 Git
#目录
2. Git 的核心概念
2.1 工作区 Working Directory
你正在编辑的项目文件所在位置,就是工作区。
例如:
my-blog/
├─ src/
├─ public/
├─ package.json
├─ README.md
└─ .gitignore
你修改文件后,这些变化会先出现在工作区。
2.2 暂存区 Staging Area
暂存区表示:
我要把这些修改放进下一次提交里
命令是:
git add .
或者在 VS Code 中点击文件旁边的 +。
2.3 本地仓库 Local Repository
提交之后,Git 会在本地保存一个版本记录。
命令是:
git commit -m "update blog"
注意:
commit 只是保存到本地,还没有上传 GitHub。
2.4 远程仓库 Remote Repository
远程仓库通常在 GitHub 上。
上传到 GitHub 的命令是:
git push
从 GitHub 拉取更新的命令是:
git pull
2.5 四个区域的关系
工作区
↓ git add
暂存区
↓ git commit
本地仓库
↓ git push
远程仓库 GitHub
对应日常流程:
git status
git add .
git commit -m "update blog"
git push
#目录
3. 第一次使用 Git 的基础配置
3.1 查看 Git 是否安装
git --version
如果输出类似:
git version 2.45.0
说明 Git 已安装。
3.2 设置用户名和邮箱
这两个信息会写入你的提交记录。
git config --global user.name "Your Name"
git config --global user.email "your-email@example.com"
例子:
git config --global user.name "Serecely"
git config --global user.email "example@gmail.com"
查看配置:
git config --global user.name
git config --global user.email
查看所有全局配置:
git config --global --list
3.3 设置默认分支名为 main
git config --global init.defaultBranch main
以后新建仓库时,默认分支就是 main。
#目录
4. 创建或下载仓库
Git 项目有两种常见开始方式。
4.1 方式一:从 GitHub 下载已有仓库
使用 git clone。
git clone git@github.com:username/repository-name.git
例子:
git clone git@github.com:username/my-blog.git
然后进入项目:
cd my-blog
查看状态:
git status
4.2 方式二:本地项目初始化为 Git 仓库
如果你已经有一个本地项目:
cd my-blog
git init
添加所有文件:
git add .
提交第一个版本:
git commit -m "init project"
绑定 GitHub 远程仓库:
git remote add origin git@github.com:username/my-blog.git
设置分支为 main:
git branch -M main
推送到 GitHub:
git push -u origin main
#目录
5. 日常 Git 工作流
5.1 每次开始工作前
建议先拉取远程最新内容:
git pull
如果你是一个人维护项目,而且只在本地改,一般不会经常冲突。但如果你在 GitHub 网页上改过文件,本地就需要先 pull。
5.2 修改文件后查看状态
git status
常见输出:
modified: src/pages/index.astro
untracked: src/content/new-post.md
含义:
modified 已修改的文件
untracked 新文件,Git 还没有跟踪
deleted 删除的文件
5.3 查看具体修改内容
git diff
查看某个文件:
git diff README.md
查看已经暂存的内容:
git diff --staged
5.4 暂存修改
暂存全部修改:
git add .
暂存单个文件:
git add README.md
暂存某个目录:
git add src/
5.5 提交修改
git commit -m "update blog content"
提交信息建议清楚说明本次做了什么。
推荐:
git commit -m "add git usage guide"
git commit -m "fix homepage layout"
git commit -m "update astro config"
不推荐:
git commit -m "111"
git commit -m "修改"
git commit -m "test"
5.6 推送到 GitHub
git push
如果是第一次推送当前分支:
git push -u origin main
设置过 -u 后,以后只需要:
git push
5.7 一个完整例子
cd my-blog
git pull
# 修改文章或代码后
git status
git add .
git commit -m "add new blog post"
git push
#目录
6. VS Code 可视化 Git 操作
VS Code 可以不用手写大部分 Git 命令。
6.1 打开正确的项目文件夹
一定要打开包含 .git、package.json、src 等文件的项目根目录。
正确:
my-blog/
├─ .git/
├─ src/
├─ package.json
└─ README.md
错误:
my-work/
└─ my-blog/
├─ .git/
├─ src/
└─ package.json
如果你打开的是外层 my-work,VS Code 可能找不到正确项目。
6.2 打开源代码管理面板
快捷键:
Ctrl + Shift + G
或点击左侧分支形状图标。
6.3 查看文件变化
VS Code Source Control 面板中常见标记:
M = Modified,已修改
U = Untracked,新文件
A = Added,已添加
D = Deleted,已删除
点击文件可以查看修改对比。
6.4 暂存文件
在文件右侧点击:
+
等价于:
git add 文件名
点击 Changes 右侧的 +,等价于:
git add .
6.5 提交
在输入框写提交信息:
update blog
点击 Commit。
等价于:
git commit -m "update blog"
6.6 推送
点击:
Sync Changes
或:
Source Control → ... → Push
等价于:
git push
第一次推送时可能显示:
Publish Branch
点击它即可,等价于:
git push -u origin main
6.7 查看 Git 输出日志
如果 VS Code 推送失败:
Ctrl + Shift + P
→ Git: Show Git Output
这里可以看到 VS Code 实际执行的 Git 命令和报错。
#目录
7. 使用 SSH 连接 GitHub
推荐使用 SSH,而不是 HTTPS。
SSH 的好处:
- 不需要每次输入 GitHub 账号密码
- 不依赖 GitHub Token
- 更适合长期使用
- VS Code 推送也会自动走 SSH
7.1 生成 SSH Key
在 Git Bash 中执行:
ssh-keygen -t ed25519 -C "your-email@example.com"
一路按回车。
生成后会有两个文件:
~/.ssh/id_ed25519 私钥,不能给别人
~/.ssh/id_ed25519.pub 公钥,可以添加到 GitHub
7.2 查看公钥
cat ~/.ssh/id_ed25519.pub
复制整段内容,通常以 ssh-ed25519 开头。
7.3 添加到 GitHub
路径:
GitHub → Settings → SSH and GPG keys → New SSH key
填写:
Title: My Laptop
Key type: Authentication Key
Key: 粘贴 id_ed25519.pub 内容
7.4 测试 SSH
ssh -T git@github.com
第一次会提示:
Are you sure you want to continue connecting?
输入:
yes
成功时会看到类似:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
这说明 SSH 已经连通。
7.5 把仓库远程地址改成 SSH
查看当前远程地址:
git remote -v
如果是 HTTPS:
https://github.com/username/my-blog.git
改成 SSH:
git remote set-url origin git@github.com:username/my-blog.git
检查:
git remote -v
应该变成:
origin git@github.com:username/my-blog.git (fetch)
origin git@github.com:username/my-blog.git (push)
7.6 如果 22 端口无法连接
某些网络会拦截 SSH 默认端口 22,可以让 GitHub SSH 走 443 端口。
编辑:
notepad ~/.ssh/config
写入:
Host github.com
HostName ssh.github.com
User git
Port 443
再测试:
ssh -T git@github.com
#目录
8. 分支的基本使用
8.1 查看当前分支
git branch
带 * 的是当前分支:
* main
8.2 创建新分支
git branch dev
切换到新分支:
git switch dev
也可以一步完成:
git switch -c dev
8.3 合并分支
例如你在 dev 分支完成修改,要合并到 main:
git switch main
git merge dev
然后推送:
git push
8.4 删除分支
删除本地分支:
git branch -d dev
强制删除:
git branch -D dev
删除远程分支:
git push origin --delete dev
8.5 个人项目建议
个人博客或个人项目,初期可以只用一个分支:
main
等你熟悉后,再使用:
main:稳定版本
dev:开发版本
#目录
9. 远程仓库 remote 的使用
9.1 查看远程仓库
git remote -v
输出示例:
origin git@github.com:username/my-blog.git (fetch)
origin git@github.com:username/my-blog.git (push)
9.2 添加远程仓库
git remote add origin git@github.com:username/my-blog.git
9.3 修改远程仓库地址
git remote set-url origin git@github.com:username/new-repo.git
9.4 删除远程仓库
git remote remove origin
9.5 第一次推送并建立追踪关系
git push -u origin main
之后可以直接:
git push
git pull
#目录
10. .gitignore 的使用
.gitignore 用来告诉 Git:
哪些文件不要提交到仓库
10.1 Node / 前端项目常用 .gitignore
# dependencies
node_modules/
# build output
dist/
build/
.output/
# environment variables
.env
.env.local
.env.*.local
# logs
npm-debug.log*
yarn-debug.log*
pnpm-debug.log*
# system files
.DS_Store
Thumbs.db
# editor
.vscode/*
!.vscode/extensions.json
.idea/
10.2 Astro 项目常用 .gitignore
node_modules/
dist/
.astro/
.env
.env.local
.DS_Store
注意:
public/ 通常要提交
src/ 通常要提交
package.json 要提交
package-lock.json 通常要提交
node_modules/ 不要提交
dist/ 通常不要提交,除非你的部署方案明确要求
10.3 已经提交过的文件,后来加入 .gitignore 不生效怎么办
例如你已经把 node_modules 提交过了,后来才写入 .gitignore。
需要先从 Git 跟踪中移除,但保留本地文件:
git rm -r --cached node_modules
git add .gitignore
git commit -m "remove node_modules from git"
git push
#目录
11. 常见错误与解决办法
11.1 fatal: not a git repository
报错:
fatal: not a git repository (or any of the parent directories): .git
原因:
你当前目录不是 Git 仓库。
解决:
进入正确项目目录:
cd my-blog
检查是否有 .git:
ls -a
如果是新项目,需要初始化:
git init
11.2 remote origin already exists
报错:
error: remote origin already exists.
原因:
已经存在名为 origin 的远程仓库。
解决:
查看远程地址:
git remote -v
如果地址错了,修改:
git remote set-url origin git@github.com:username/my-blog.git
如果确实要重新添加:
git remote remove origin
git remote add origin git@github.com:username/my-blog.git
11.3 src refspec main does not match any
报错:
error: src refspec main does not match any
常见原因:
还没有任何 commit,或者当前分支不叫 main。
解决:
git status
git add .
git commit -m "init project"
git branch -M main
git push -u origin main
11.4 Updates were rejected because the tip of your current branch is behind
报错:
Updates were rejected because the tip of your current branch is behind its remote counterpart.
原因:
远程仓库有你本地没有的提交。
解决:
git pull origin main
git push
如果两个仓库历史无关,例如本地新项目推到已有 README 的 GitHub 仓库:
git pull origin main --allow-unrelated-histories
如果出现冲突,先处理冲突,再:
git add .
git commit -m "resolve merge conflicts"
git push
如果你确定远程内容不要了,才可以强制推送:
git push -u origin main --force-with-lease
谨慎使用强制推送。
11.5 Pulling is not possible because you have unmerged files
报错:
Pulling is not possible because you have unmerged files.
原因:
上一次合并冲突还没有处理完。
解决:
查看状态:
git status
打开冲突文件,找到类似内容:
<<<<<<< HEAD
本地内容
=======
远程内容
>>>>>>> origin/main
手动改成你想保留的最终内容。
然后:
git add .
git commit -m "resolve merge conflicts"
git push
如果想放弃这次合并:
git merge --abort
11.6 There is no merge to abort
报错:
fatal: There is no merge to abort (MERGE_HEAD missing).
原因:
当前并没有处在合并状态,所以没有可取消的 merge。
解决:
这不是严重错误。继续查看状态:
git status
根据实际状态继续操作。
11.7 Permission denied (publickey)
报错:
git@github.com: Permission denied (publickey).
原因:
SSH key 没配置好,或者 GitHub 没有你的公钥。
解决:
检查 SSH 是否可用:
ssh -T git@github.com
如果失败,检查是否有 key:
ls ~/.ssh
生成 key:
ssh-keygen -t ed25519 -C "your-email@example.com"
查看公钥并添加到 GitHub:
cat ~/.ssh/id_ed25519.pub
11.8 Host key verification failed
报错:
Host key verification failed.
原因:
SSH 主机验证异常,可能是首次连接没确认,或 known_hosts 记录异常。
解决:
先测试:
ssh -T git@github.com
如果仍失败,可以删除 GitHub 的旧记录:
ssh-keygen -R github.com
然后重新连接:
ssh -T git@github.com
输入:
yes
11.9 Failed to connect to github.com port 443
报错:
Failed to connect to github.com port 443
原因:
当前网络无法连接 GitHub 的 HTTPS 端口。
解决:
测试网络:
Test-NetConnection github.com -Port 443
如果你使用代理,检查代理端口:
netstat -ano | findstr :7890
netstat -ano | findstr :7897
如果改用 SSH,可测试:
ssh -T git@github.com
如果 22 端口失败,可配置 SSH 走 443:
Host github.com
HostName ssh.github.com
User git
Port 443
11.10 Failed to connect to 127.0.0.1 port 7890
报错:
Failed to connect to 127.0.0.1 port 7890
原因:
Git 被设置成走本地代理 127.0.0.1:7890,但这个端口没有代理服务运行。
查看 Git 代理:
git config --global --get http.proxy
git config --global --get https.proxy
清除 Git 代理:
git config --global --unset-all http.proxy
git config --global --unset-all https.proxy
查看 7890 是否监听:
netstat -ano | findstr :7890
如果你确实需要代理,就打开代理软件,并确认端口是否正确。
设置 Git 代理示例:
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
11.11 Please specify which branch you want to merge with
报错:
Please specify which branch you want to merge with.
原因:
本地分支还没有和远程分支建立追踪关系。
解决:
git branch --set-upstream-to=origin/main main
或者第一次推送时使用:
git push -u origin main
之后再执行:
git pull
git push
11.12 nothing to commit, working tree clean
输出:
nothing to commit, working tree clean
含义:
当前没有可提交的修改。
这不是错误。
如果你想推送之前已经提交的内容:
git push
如果你以为自己改了文件,但 Git 没看到,检查:
- 文件是否保存
- 是否在正确项目目录
- 文件是否被
.gitignore忽略 - 是否打开了错误文件夹
11.13 detached HEAD
输出:
HEAD detached at ...
原因:
你当前不在正常分支上,而是切到了某个历史提交。
解决:
回到 main 分支:
git switch main
如果你在 detached HEAD 状态下做了修改,并且想保留:
git switch -c temp-save
git switch main
git merge temp-save
11.14 不小心提交了 node_modules
解决:
确认 .gitignore 包含:
node_modules/
从 Git 跟踪中移除:
git rm -r --cached node_modules
git add .gitignore
git commit -m "remove node_modules"
git push
11.15 提交信息写错了
如果刚刚提交,还没有 push,可以修改最后一次提交信息:
git commit --amend -m "new commit message"
如果已经 push 了,不建议新手修改历史。可以下一次提交时写清楚。
11.16 想撤销工作区修改
撤销某个文件的未提交修改:
git restore README.md
撤销所有未提交修改:
git restore .
注意:这会丢弃本地未提交内容。
11.17 想取消暂存
如果已经 git add,但还没 commit:
git restore --staged README.md
取消所有暂存:
git restore --staged .
文件内容不会丢,只是从暂存区退回工作区。
11.18 想回退到上一个提交
保留文件修改,只撤销 commit:
git reset --soft HEAD~1
撤销 commit,并把修改放回工作区:
git reset --mixed HEAD~1
彻底回退,丢弃修改:
git reset --hard HEAD~1
谨慎使用 --hard。
11.19 想查看历史记录
git log
简洁显示:
git log --oneline
带分支图:
git log --oneline --graph --all
11.20 换电脑后如何继续项目
在新电脑上:
git clone git@github.com:username/my-blog.git
cd my-blog
npm install
然后正常开发:
git pull
git add .
git commit -m "update blog"
git push
#目录
12. 常用命令速查表
基础
git --version
git status
git log --oneline
git diff
配置
git config --global user.name "Your Name"
git config --global user.email "your-email@example.com"
git config --global --list
初始化和克隆
git init
git clone git@github.com:username/repo.git
提交
git add .
git commit -m "message"
远程仓库
git remote -v
git remote add origin git@github.com:username/repo.git
git remote set-url origin git@github.com:username/repo.git
git remote remove origin
推送和拉取
git pull
git push
git push -u origin main
分支
git branch
git switch main
git switch -c dev
git merge dev
git branch -d dev
撤销
git restore file
git restore .
git restore --staged file
git reset --soft HEAD~1
git reset --hard HEAD~1
SSH
ssh-keygen -t ed25519 -C "your-email@example.com"
cat ~/.ssh/id_ed25519.pub
ssh -T git@github.com
#目录
13. 推荐的个人项目 Git 习惯
13.1 每次写项目之前先拉取
git pull
避免远程和本地不一致。
13.2 每次提交前看状态
git status
确认哪些文件会被提交。
13.3 提交信息写清楚
推荐格式:
add xxx
fix xxx
update xxx
remove xxx
例子:
git commit -m "add git usage guide"
git commit -m "fix deployment workflow"
git commit -m "update homepage style"
git commit -m "remove unused images"
13.4 不要提交依赖和构建产物
通常不要提交:
node_modules/
dist/
.env
应该提交:
src/
public/
package.json
package-lock.json
README.md
.gitignore
.github/workflows/
13.5 推送前先本地测试
前端项目推荐:
npm install
npm run build
构建成功后再提交和推送:
git add .
git commit -m "update project"
git push
13.6 一个人维护项目时的推荐流程
git pull
npm run build
git status
git add .
git commit -m "update blog"
git push
VS Code 可视化版:
1. Pull
2. 修改文件
3. npm run build 测试
4. Source Control 查看 Changes
5. 点击 + 暂存
6. 输入 commit message
7. Commit
8. Push / Sync Changes
#目录
附录:一次完整 SSH + GitHub 推送示例
假设项目名是:
my-blog
GitHub 仓库是:
git@github.com:username/my-blog.git
完整流程:
# 进入项目
cd my-blog
# 初始化 Git
git init
# 设置 main 分支
git branch -M main
# 添加远程仓库
git remote add origin git@github.com:username/my-blog.git
# 查看状态
git status
# 添加文件
git add .
# 提交
git commit -m "init blog"
# 第一次推送
git push -u origin main
以后每次更新:
git pull
git add .
git commit -m "update blog"
git push
#目录
附录:Git 命令和 VS Code 操作对照表
| 目标 | Git 命令 | VS Code 操作 |
|---|---|---|
| 查看修改 | git status | Source Control 面板 |
| 查看差异 | git diff | 点击变更文件 |
| 暂存文件 | git add file | 文件右侧点 + |
| 暂存全部 | git add . | Changes 右侧点 + |
| 提交 | git commit -m "message" | 输入消息后点 Commit |
| 推送 | git push | Push / Sync Changes |
| 拉取 | git pull | Pull / Sync Changes |
| 查看远程 | git remote -v | 终端查看更清楚 |
| 切换分支 | git switch branch | 左下角分支名 |
| 新建分支 | git switch -c branch | 左下角分支名 → Create new branch |
#目录
最简记忆版
保存文件,只是保存到电脑。
git add,是选择要提交的修改。
git commit,是保存一个本地版本。
git push,是上传到 GitHub。
git pull,是从 GitHub 下载最新版本。
日常命令:
git status
git add .
git commit -m "update"
git push
VS Code 日常操作:
Source Control → + → 写提交信息 → Commit → Push