type
Post
status
Published
date
Jun 25, 2026
slug
gitnote
summary
面向初学者到中级开发者的一份 Git 复习笔记。理解:文件从工作区到暂存区,再到本地仓库,最后同步到远程仓库 的过程。
tags
必看精选
笔记
工具
category
知识小记
icon
password
类型
日期
Feb 5, 2024
标签
概述
状态
完成
Git 常用指令大全与总结
面向初学者到中级开发者的一份 Git 复习笔记。理解:文件从工作区到暂存区,再到本地仓库,最后同步到远程仓库 的过程。
1. Git 的作用与基本概念
1.1 Git 是什么
Git 是一个分布式版本控制系统,主要用来管理代码的修改历史。它可以帮助我们:
- 记录每一次代码变更
- 回退到某个历史版本
- 在不同功能之间使用分支隔离开发
- 与团队成员协作开发
- 把本地代码同步到 GitHub、GitLab、Gitee 等远程仓库
简单说,Git 解决的是一个很现实的问题:代码改来改去,怎么保证能查、能退、能合并、能协作。
1.2 Git 的几个核心区域
区域 | 英文 | 作用 |
工作区 | Working Directory | 你正在编辑的项目文件 |
暂存区 | Staging Area / Index | 准备提交的修改清单 |
本地仓库 | Local Repository | 本机保存的提交历史 |
远程仓库 | Remote Repository | GitHub、GitLab、Gitee 上的共享仓库 |
常见流程:
对应关系:
1.3 Git 的几个核心概念
概念 | 说明 |
commit | 一次提交,可以理解为代码历史中的一个存档点 |
branch | 分支,用来隔离不同功能或版本 |
merge | 合并,把一个分支的修改合到另一个分支 |
conflict | 冲突,多个分支修改了同一位置,Git 无法自动判断保留谁 |
remote | 远程仓库地址,例如 origin |
HEAD | 当前所在提交位置,通常指向当前分支的最新提交 |
2. 常用指令分类讲解
2.1 初始化与配置
指令 | 作用说明 | 常见使用场景 | 示例命令 |
git init | 在当前目录初始化一个 Git 仓库 | 本地新建项目后,想开始用 Git 管理 | git init |
git clone <仓库地址> | 从远程仓库复制项目到本地 | 第一次拉取别人的项目或公司项目 | git clone <https://github.com/user/repo.git> |
git config --global user.name <用户名> | 设置全局提交用户名 | 第一次安装 Git 后配置身份 | git config --global user.name "Tom" |
git config --global user.email <邮箱> | 设置全局提交邮箱 | 第一次安装 Git 后配置身份 | git config --global user.email "tom@example.com" |
git config --list | 查看当前 Git 配置 | 检查用户名、邮箱、代理等配置 | git config --list |
实战小技巧
-global表示对当前电脑用户生效。
- 如果只想对某个项目单独设置用户名或邮箱,进入项目目录后去掉
-global即可。
2.2 查看状态与历史
指令 | 作用说明 | 常见使用场景 | 示例命令 |
git status | 查看工作区和暂存区状态 | 提交前确认哪些文件被修改、暂存或未跟踪 | git status |
git status -s | 以简洁格式查看状态 | 文件很多时快速扫一眼改动 | git status -s |
git log | 查看提交历史 | 想知道项目之前提交过什么 | git log |
git log --oneline | 单行查看提交历史 | 快速查看 commit id 和提交信息 | git log --oneline |
git log --graph --oneline --all | 图形化查看所有分支历史 | 分支较多时观察合并关系 | git log --graph --oneline --all |
git diff | 查看工作区中尚未暂存的修改 | git add 前检查自己改了什么 | git diff |
git diff --staged | 查看已经暂存但尚未提交的修改 | git commit 前检查暂存区内容 | git diff --staged |
git show <commit> | 查看某次提交的具体内容 | 排查某次提交改了哪些文件 | git show a1b2c3d |
实战小技巧
提交前建议养成这个顺序:
这样可以减少“把不该提交的东西提交上去”的情况。
2.3 添加与提交
指令 | 作用说明 | 常见使用场景 | 示例命令 |
git add <文件> | 将指定文件加入暂存区 | 只想提交某个文件的修改 | git add index.html |
git add . | 将当前目录下的修改加入暂存区 | 一次性暂存当前目录所有改动 | git add . |
git add -A | 暂存所有修改,包括新增、修改、删除 | 想完整记录本次工作区变化 | git add -A |
git commit -m "说明" | 将暂存区内容提交到本地仓库 | 完成一个功能点或修复后保存历史 | git commit -m "新增登录页面" |
git commit -am "说明" | 跳过 git add,提交已跟踪文件的修改 | 只修改了已被 Git 管理的文件 | git commit -am "修复按钮样式" |
git commit --amend | 修改上一次提交 | 上次提交信息写错,或漏提交了小改动 | git commit --amend |
实战小技巧
git commit -am不会提交新文件,因为新文件还没有被 Git 跟踪。
- 一次提交最好只表达一个清晰意图,例如“新增登录表单”或“修复分页计算错误”。
- 提交信息不建议写成
update、fix bug、修改代码,以后回看会很痛苦。
推荐格式:
2.4 分支管理
指令 | 作用说明 | 常见使用场景 | 示例命令 |
git branch | 查看本地分支 | 想知道当前项目有哪些分支 | git branch |
git branch -a | 查看本地和远程所有分支 | 想确认远程是否有某个分支 | git branch -a |
git branch <分支名> | 创建新分支 | 准备开发新功能,但暂时不切换过去 | git branch feature-login |
git switch <分支名> | 切换分支 | 从当前分支切换到目标分支 | git switch feature-login |
git switch -c <分支名> | 创建并切换到新分支 | 开始开发一个新功能 | git switch -c feature-login |
git checkout <分支名> | 切换分支的旧写法 | 老项目或旧教程中常见 | git checkout main |
git checkout -b <分支名> | 创建并切换分支的旧写法 | 老项目或旧教程中常见 | git checkout -b feature-login |
git branch -d <分支名> | 删除已经合并的本地分支 | 功能分支合并后清理本地分支 | git branch -d feature-login |
git branch -D <分支名> | 强制删除本地分支 | 分支没合并但确定不要了 | git branch -D test-branch |
git branch -m <新分支名> | 重命名当前分支 | 分支名写错或需要规范命名 | git branch -m feature-auth |
实战小技巧
推荐分支命名:
类型 | 示例 |
功能分支 | feature/login |
修复分支 | fix/login-error |
文档分支 | docs/git-note |
重构分支 | refactor/user-service |
常见开发流程:
2.5 合并与冲突处理
指令 | 作用说明 | 常见使用场景 | 示例命令 |
git merge <分支名> | 将指定分支合并到当前分支 | 功能开发完成后合并到主分支 | git merge feature-login |
git merge --abort | 取消当前合并过程 | 合并冲突太多,想先退回合并前状态 | git merge --abort |
git rebase <分支名> | 将当前分支的提交“移动”到目标分支之后 | 保持提交历史更线性 | git rebase main |
git rebase --continue | 解决冲突后继续 rebase | rebase 过程中处理完冲突 | git rebase --continue |
git rebase --abort | 取消当前 rebase | rebase 出问题,想回到开始前 | git rebase --abort |
冲突处理流程
当 Git 提示冲突时,文件里通常会出现类似内容:
处理步骤:
- 打开冲突文件
- 手动决定保留哪部分内容,或整合两边内容
- 删除
<<<<<<<、=======、>>>>>>>标记
- 暂存解决后的文件
- 完成合并或继续 rebase
如果是 rebase:
merge 和 rebase 怎么选
方式 | 特点 | 适合场景 |
merge | 保留真实分支合并记录 | 团队协作、主分支合并功能分支 |
rebase | 历史更线性,但会改写提交历史 | 个人功能分支同步主分支最新代码 |
经验建议:
- 已经推送到远程并且多人基于它开发的分支,不要随便 rebase。
- 自己本地的功能分支,可以用 rebase 整理历史。
2.6 远程仓库操作
指令 | 作用说明 | 常见使用场景 | 示例命令 |
git remote -v | 查看远程仓库地址 | 检查当前项目连接到哪个远程仓库 | git remote -v |
git remote add origin <地址> | 添加远程仓库地址 | 本地项目第一次关联 GitHub 仓库 | git remote add origin <https://github.com/user/repo.git> |
git remote set-url origin <地址> | 修改远程仓库地址 | 仓库地址变更,或从 HTTPS 改成 SSH | git remote set-url origin git@github.com:user/repo.git |
git fetch | 拉取远程更新,但不自动合并 | 想先看看远程有什么新内容 | git fetch origin |
git pull | 拉取远程更新并合并到当前分支 | 开发前同步最新代码 | git pull |
git push | 将本地提交推送到远程 | 本地提交完成后同步给团队 | git push |
git push -u origin <分支名> | 首次推送分支并建立上游关联 | 新分支第一次推送到远程 | git push -u origin feature-login |
git push origin --delete <分支名> | 删除远程分支 | 功能分支合并后清理远程分支 | git push origin --delete feature-login |
实战小技巧
fetch 和 pull 的区别:如果你想稳一点,可以先:
确认远程变化后再决定怎么合并。
2.7 撤销与回退
这一部分最容易误用。建议先理解三句话:
restore常用于撤销工作区或暂存区的修改。
reset常用于移动提交指针,可能影响暂存区和工作区。
revert会新增一次“反向提交”,适合撤销已经推送的提交。
指令 | 作用说明 | 常见使用场景 | 示例命令 |
git restore <文件> | 撤销工作区中某个文件的修改 | 文件改乱了,想恢复到最近一次提交状态 | git restore index.html |
git restore --staged <文件> | 将文件从暂存区移出,但保留工作区修改 | git add 后发现暂时不想提交这个文件 | git restore --staged index.html |
git reset HEAD <文件> | 取消暂存的旧写法 | 老教程中常见,作用类似取消 git add | git reset HEAD index.html |
git reset --soft <commit> | 回退提交,但保留修改在暂存区 | 提交早了,想重新组织提交 | git reset --soft HEAD~1 |
git reset --mixed <commit> | 回退提交,保留修改在工作区 | 默认模式,想重新选择哪些文件提交 | git reset --mixed HEAD~1 |
git reset --hard <commit> | 强制回退,丢弃之后的提交和修改 | 确定不要某些提交和本地改动 | git reset --hard HEAD~1 |
git revert <commit> | 新建一次反向提交来撤销某次提交 | 撤销已经推送到远程的提交 | git revert a1b2c3d |
git clean -fd | 删除未被 Git 跟踪的文件和目录 | 清理构建产物或临时文件 | git clean -fd |
git stash | 临时保存当前未提交修改 | 正在开发时需要切换分支处理别的事 | git stash |
git stash pop | 恢复最近一次 stash,并删除该 stash 记录 | 回到原任务继续开发 | git stash pop |
git stash list | 查看 stash 列表 | 临时保存过多次,想确认记录 | git stash list |
高风险命令提醒
下面这些命令会丢弃内容,执行前一定要确认:
如果不确定,先运行:
必要时可以先创建一个临时分支保底:
3. 常用命令速查表
分类 | 指令 | 用途 |
初始化 | git init | 初始化本地仓库 |
克隆 | git clone <url> | 从远程复制仓库 |
状态 | git status | 查看文件状态 |
差异 | git diff | 查看修改内容 |
暂存 | git add . | 添加修改到暂存区 |
提交 | git commit -m "说明" | 提交到本地仓库 |
历史 | git log --oneline | 查看提交历史 |
分支 | git branch | 查看分支 |
切换 | git switch <分支> | 切换分支 |
合并 | git merge <分支> | 合并分支 |
拉取 | git pull | 拉取远程更新 |
推送 | git push | 推送本地提交 |
撤销 | git restore <文件> | 撤销工作区修改 |
回退 | git reset --soft HEAD~1 | 回退提交但保留修改 |
反撤销 | git revert <commit> | 用新提交撤销旧提交 |
暂存现场 | git stash | 临时保存当前修改 |
4. 总结
4.1 最常用的 10 个命令
排名 | 命令 | 核心用途 |
1 | git status | 查看当前状态 |
2 | git add . | 暂存修改 |
3 | git commit -m "说明" | 提交修改 |
4 | git log --oneline | 查看提交历史 |
5 | git diff | 查看修改差异 |
6 | git switch -c <分支名> | 创建并切换分支 |
7 | git switch <分支名> | 切换分支 |
8 | git pull | 拉取远程最新代码 |
9 | git push | 推送本地提交 |
10 | git merge <分支名> | 合并分支 |
如果只记一条主线,就是:
4.2 学习 Git 的核心思路
学习 Git 不要一开始就死背所有命令,先抓住这几条主线:
第一条主线:文件流转
对应命令:
第二条主线:分支协作
对应命令:
第三条主线:出错恢复
出错并不可怕,关键是先判断“错发生在哪个区域”:
出错位置 | 常用处理 |
工作区改乱了 | git restore <文件> |
不小心 add 了 | git restore --staged <文件> |
commit 写错了 | git commit --amend |
本地提交想撤回 | git reset --soft HEAD~1 |
已推送提交想撤销 | git revert <commit> |
4.3 容易混淆的概念对比
git fetch vs git pull
命令 | 是否合并 | 说明 |
git fetch | 否 | 只下载远程更新,不改变当前工作分支 |
git pull | 是 | 下载远程更新,并合并到当前分支 |
建议:想稳妥观察远程变化时用
fetch,日常同步代码常用 pull。git merge vs git rebase
命令 | 历史特点 | 适合场景 |
git merge | 保留合并记录 | 团队协作、主分支合并 |
git rebase | 历史更线性 | 整理个人功能分支 |
建议:初学者优先掌握
merge,熟悉之后再学习 rebase。git reset vs git revert
命令 | 是否改写历史 | 适合场景 |
git reset | 是 | 本地提交回退 |
git revert | 否 | 撤销已经推送的提交 |
建议:已经推送到远程的提交,优先用
revert。git restore vs git reset
命令 | 主要用途 | 说明 |
git restore | 恢复文件状态 | 更适合撤销文件修改或取消暂存 |
git reset | 移动提交指针 | 更适合回退提交 |
建议:文件级撤销用
restore,提交级回退用 reset。git checkout vs git switch
命令 | 说明 |
git checkout | 旧命令,既能切分支,也能恢复文件,功能较杂 |
git switch | 新命令,专门用于切换分支,语义更清晰 |
建议:新手优先使用
git switch。4.4 新手使用建议
- 每次提交前先运行
git status,确认当前状态。
- 提交前用
git diff看一眼自己到底改了什么。
- 一次提交只做一件事,提交信息写清楚。
- 开发新功能前先从主分支拉最新代码。
- 不要直接在
main分支上做复杂开发,尽量新建功能分支。
- 不确定
reset --hard、clean -fd这种命令后果时,不要急着执行。
- 已经推送到远程的提交,不要随便改写历史。
- 遇到冲突不要慌,先打开文件看冲突标记,再手动整理。
- 学会用
git stash临时保存现场,切换任务会舒服很多。
- Git 的核心不是命令数量,而是知道修改现在处在哪个区域。
5. 一套推荐的日常工作流
开始新功能
开发中提交代码
推送到远程
合并前同步主分支
功能完成后
6. 最后记一句
Git 的学习顺序建议是:
真正熟练使用 Git,不是因为记住了所有命令,而是因为你能判断:
- 当前修改在哪里?
- 我要保存、撤销、同步,还是合并?
- 这个操作会不会影响别人?
只要这三个问题想清楚,Git 就会从“玄学工具”变成可靠的开发伙伴。
- Author:Uonlra
- URL:https://www.uonlra.blog//article/gitnote
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!










