Git 的核心不仅是记忆命令,更是理解 “工作区 → 暂存区 → 本地仓库 → 远程仓库” 这四个区域的数据流转。
以下为你整理的 Git 命令全景图,已按使用频率和场景分类,涵盖从日常开发到紧急救火的所有关键操作。
1. 配置与初始化
💡 提示:全局配置只需设置一次,仓库级配置优先级更高。
| 命令 | 说明 | 频率 | 备注/示例 |
|---|---|---|---|
git config --global user.name "Name" |
设置全局用户名 | ⭐⭐⭐ | 提交记录的身份标识 |
git config --global user.email "x@y.com" |
设置全局邮箱 | ⭐⭐⭐ | 需与 GitHub/GitLab 邮箱一致 |
git config --global core.editor code |
设置默认编辑器 | ⭐⭐ | 推荐 VS Code (code --wait) |
git config --list |
查看所有配置 | ⭐⭐ | 加 --show-origin可查看配置来源 |
git init |
初始化本地仓库 | ⭐⭐⭐ | 在项目根目录执行 |
git clone <url> |
克隆远程仓库 | ⭐⭐⭐ | 支持 HTTPS / SSH 协议 |
git clone -b <branch> <url> |
克隆指定分支 | ⭐⭐ | 避免拉取全部分支历史 |
git clone --depth 1 <url> |
浅克隆(仅最新提交) | ⭐⭐ | 大型仓库节省空间和时间 |
2. 日常工作流(核心高频)
💡 黄金法则:小步提交,频繁提交,每次提交只做一件事。
| 命令 | 说明 | 频率 | 备注/示例 |
|---|---|---|---|
git status |
查看工作区/暂存区状态 | ⭐⭐⭐⭐⭐ | 最常用命令,养成随时执行的习惯 |
git add <file> |
添加指定文件到暂存区 | ⭐⭐⭐⭐⭐ | 精确控制提交内容 |
git add . |
添加所有变更到暂存区 | ⭐⭐⭐⭐ | 确认无意外文件时使用 |
git add -p |
交互式选择代码块暂存 | ⭐⭐⭐ | 同一文件部分修改时极有用 |
git commit -m "msg" |
提交暂存区内容 | ⭐⭐⭐⭐⭐ | 遵循 Conventional Commits 规范 |
git commit --amend |
修改最后一次提交 | ⭐⭐⭐ | 补漏文件或修改信息,未推送时用 |
git diff |
查看工作区 vs 暂存区差异 | ⭐⭐⭐⭐ | 提交前必查 |
git diff --staged |
查看暂存区 vs 上次提交差异 | ⭐⭐⭐ | 确认即将提交的内容 |
git restore <file> |
撤销工作区修改 | ⭐⭐⭐ | 替代旧的 git checkout -- <file> |
git restore --staged <file> |
取消暂存 | ⭐⭐⭐ | 替代旧的 git reset HEAD <file> |
git rm <file> |
删除文件并记录到暂存区 | ⭐⭐ | 仅删文件用 rm,Git 不会追踪 |
git mv <old> <new> |
重命名/移动文件 | ⭐⭐ | 保留文件历史记录 |
3. 分支管理
💡 原则:主分支永远保持可部署状态,所有开发在特性分支进行。
| 命令 | 说明 | 频率 | 备注/示例 |
|---|---|---|---|
git branch |
列出本地分支 | ⭐⭐⭐⭐ | -a查看所有,-r查看远程 |
git branch <name> |
创建新分支 | ⭐⭐⭐⭐ | 仅创建不切换 |
git switch <name> |
切换到已有分支 | ⭐⭐⭐⭐⭐ | 替代 checkout,语义更清晰 |
git switch -c <name> |
创建并切换新分支 | ⭐⭐⭐⭐⭐ | 等同于 checkout -b |
git merge <branch> |
合并分支到当前分支 | ⭐⭐⭐⭐ | 产生合并提交,保留完整历史 |
git rebase <branch> |
变基(线性化历史) | ⭐⭐⭐ | 禁止对公共分支 rebase |
git cherry-pick <commit> |
拣选特定提交到当前分支 | ⭐⭐⭐ | 跨分支同步单个修复 |
git branch -d <name> |
删除已合并分支 | ⭐⭐⭐ | -D强制删除未合并分支 |
git stash |
临时保存工作区修改 | ⭐⭐⭐ | 切分支前不想提交时用 |
git stash pop |
恢复最近一次 stash | ⭐⭐⭐ | stash list查看,apply不删除 |
4. 远程协作
💡 安全准则:推送前务必先拉取,解决冲突后再推送。
| 命令 | 说明 | 频率 | 备注/示例 |
|---|---|---|---|
git fetch |
获取远程更新(不合并) | ⭐⭐⭐⭐ | 安全预览远程变更 |
git pull |
拉取并合并远程更新 | ⭐⭐⭐⭐⭐ | =fetch+merge |
git pull --rebase |
拉取并变基 | ⭐⭐⭐ | 保持线性历史,推荐团队使用 |
git push |
推送到远程对应分支 | ⭐⭐⭐⭐⭐ | 首次推送用 -u建立追踪关系 |
git push origin <branch> |
推送指定分支 | ⭐⭐⭐ | 显式指定更安全 |
git push --force-with-lease |
安全强推 | ⭐⭐ | 比 --force安全,防止覆盖他人提交 |
git remote -v |
查看远程仓库地址 | ⭐⭐ | 确认推送目标 |
git remote add <name> <url> |
添加远程仓库 | ⭐⭐ | 多远程源管理(如 fork 上游) |
5. 历史查看与考古
💡 技巧:善用
--oneline和--graph组合获得紧凑的可视化历史。
| 命令 | 说明 | 频率 | 备注/示例 |
|---|---|---|---|
git log --oneline --graph |
紧凑图形化日志 | ⭐⭐⭐⭐ | 最常用的历史查看方式 |
git log -p <file> |
查看文件每次提交的diff | ⭐⭐⭐ | 追溯文件演变过程 |
git blame <file> |
逐行显示最后修改者 | ⭐⭐⭐ | IDE 内置 GitLens 体验更好 |
git reflog |
查看所有引用变更历史 | ⭐⭐⭐ | 救命命令,找回丢失的提交 |
git bisect start/good/bad |
二分查找引入Bug的提交 | ⭐⭐ | 自动化定位回归问题 |
git shortlog -sn |
按作者统计提交数 | ⭐ | 项目贡献度分析 |
6. 标签与发布
| 命令 | 说明 | 频率 | 备注/示例 |
|---|---|---|---|
git tag v1.0.0 |
创建轻量标签 | ⭐⭐ | 仅指针,无附加信息 |
git tag -a v1.0.0 -m "msg" |
创建附注标签 | ⭐⭐⭐ | 推荐,包含作者、日期、说明 |
git push origin --tags |
推送所有标签 | ⭐⭐ | 标签默认不随 push 上传 |
git describe --tags |
基于最近标签描述当前提交 | ⭐⭐ | CI/CD 自动生成版本号 |
7. 高级与急救(低频但关键)
⚠️ 警告:以下命令可能改变历史或丢失数据,操作前建议备份或确认影响范围。
| 命令 | 说明 | 频率 | 备注/示例 |
|---|---|---|---|
git reset --soft <commit> |
回退提交,保留修改在暂存区 | ⭐⭐ | 合并多个连续提交 |
git reset --mixed <commit> |
回退提交,保留修改在工作区 | ⭐⭐ | 默认模式,重新组织提交 |
git reset --hard <commit> |
硬回退,丢弃所有修改 | ⭐ | 危险,配合 reflog 可恢复 |
git revert <commit> |
生成反向提交来撤销变更 | ⭐⭐⭐ | 公共分支撤销的安全方式 |
git clean -fd |
删除未追踪的文件和目录 | ⭐⭐ | -n先预览,-x连忽略文件也删 |
git worktree add <path> <branch> |
同时检出多个分支到不同目录 | ⭐⭐ | 并行处理多分支无需 stash |
git submodule update --init |
初始化子模块 | ⭐ | 嵌套仓库管理 |
git gc |
垃圾回收与优化 | ⭐ | 仓库过大时手动执行 |
🧠 核心概念速记卡
为了真正掌握 Git,请将以下模型刻入脑海:
工作区 (Working Directory)
│ git add
▼
暂存区 (Staging Area / Index)
│ git commit
▼
本地仓库 (Local Repository)
│ git push
▼
远程仓库 (Remote Repository)
resetvsrevert:reset改写历史(私有分支用),revert新增提交撤销变更(公共分支用)。mergevsrebase:merge保留真实历史(有合并节点),rebase创造线性历史(更干净但改写哈希)。restorevsreset:撤销文件修改用restore(安全、语义明确),回退提交用reset。switchvscheckout:Git 2.23+ 推荐用switch切分支、restore撤销修改,checkout因职责过多已被逐步弃用。
🎯 新手上路建议
- 先学高频命令:把第 2、3、4 节的 ⭐⭐⭐⭐⭐ 命令练到肌肉记忆,足以应对 90% 的日常开发。
- 安装可视化工具辅助理解:推荐 GitLens(VS Code 插件)或 Fork/Sourcetree。先用 GUI 理解数据流,再过渡到命令行。
- 搭建练习沙盒:在本地创建一个测试仓库,故意制造冲突、误删提交、错误合并,然后用
reflog+reset恢复。在安全环境中犯错是学会 Git 的最快路径。 - 配置别名提升效率:将长命令设为快捷键,例如:
git config --global alias.st status git config --global alias.co switch git config --global alias.br branch git config --global alias.lg "log --oneline --graph --all"
评论区