Git 常用命令
一份面向初学者的 Git 命令速查与教程,涵盖配置、基本操作、分支管理、远程协作、撤销修改等日常开发场景。
- 1. 配置
- 2. 基本操作
- 3. 分支管理
- 4. 远程协作
- 5. 查看历史与状态
- 6. 撤销与回退
- 7. 暂存与储藏
- 8. 标签管理
- 9. 合并与变基
- 10. 高级技巧
- 11. 常见工作流
- 附:配置速查表
1. 配置
Git 的配置分为三个层级,优先级从高到低:
| 层级 | 命令 | 生效范围 |
|---|---|---|
| 仓库级 | git config --local |
当前仓库 |
| 用户级 | git config --global |
当前用户 |
| 系统级 | git config --system |
整台机器 |
设置用户名与邮箱(安装后必做)
git config --global user.name "你的名字"
git config --global user.email "your.email@example.com"
常用配置
git config --global core.editor "code --wait" # 默认编辑器设为 VS Code
git config --global core.autocrlf true # Windows 下自动转换换行符
git config --global color.ui auto # 启用颜色输出
git config --global init.defaultBranch main # 默认分支名设为 main
git config --global alias.co checkout # 设置别名(见下文)
查看配置
git config --list # 列出所有配置
git config --global --list # 列出用户级配置
git config user.name # 查看单项配置
设置别名(Alias)
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.co checkout
git config --global alias.lg "log --oneline --graph --all --decorate"
# 之后就可以用
git st # 代替 git status
git lg # 查看漂亮的提交历史图
2. 基本操作
初始化与克隆
git init # 初始化一个新仓库
git init my-project # 创建目录并初始化
git clone <url> # 克隆远程仓库
git clone <url> my-folder # 克隆到指定目录
git clone --depth=1 <url> # 浅克隆(只拉取最新版本,速度更快)
文件的四个状态
工作区 ──git add──▶ 暂存区 ──git commit──▶ 本地仓库 ──git push──▶ 远程仓库
▲
└── 新文件/修改后文件
添加与提交
git add file.txt # 添加单个文件到暂存区
git add . # 添加所有变更(当前目录及子目录)
git add -A # 添加所有变更(全仓库)
git add -p # 交互式分段添加(大改时推荐)
git commit -m "feat: 添加用户登录功能" # 直接提交
git commit -a -m "fix: 修复崩溃问题" # 跳过暂存区,直接提交已跟踪文件
git commit --amend -m "新提交信息" # 修改最近一次提交的信息
git commit --amend --no-edit # 不修改信息,把暂存区内容合并到上一次提交
提交信息规范(Conventional Commits)
<类型>(<范围>): <简短描述>
# 常用类型
feat: # 新功能
fix: # 修复 bug
docs: # 文档更新
style: # 代码格式(不影响功能)
refactor: # 重构(既不是修复也不是新功能)
perf: # 性能优化
test: # 测试相关
chore: # 构建、CI 等杂项
ci: # CI 配置变更
示例:
git commit -m "feat(auth): 添加 OAuth 2.0 登录支持"
git commit -m "fix(parser): 修复空输入时的空指针异常"
3. 分支管理
创建与切换
git branch # 查看本地分支列表(*标记当前分支)
git branch -a # 查看所有分支(含远程)
git branch -r # 只查看远程分支
git branch feature-login # 创建新分支(不切换)
git checkout feature-login # 切换到已有分支
git switch feature-login # 新版 Git 推荐的方式
git checkout -b feature-login # 创建并切换到新分支(常用)
git switch -c feature-login # 新版等价写法
git branch -m old-name new-name # 重命名分支
git branch -d feature-login # 删除已合并的分支
git branch -D feature-login # 强制删除(未合并也能删)
分支命名建议
feature/xxx # 新功能
bugfix/xxx # 修复 bug
hotfix/xxx # 紧急修复
release/xxx # 发布版本
4. 远程协作
远程仓库管理
git remote -v # 查看远程仓库地址
git remote add origin <url> # 添加远程仓库
git remote remove origin # 移除远程仓库
git remote set-url origin <url> # 修改远程仓库地址
git remote rename origin upstream # 重命名远程仓库
拉取与推送
git push # 推送到默认远程(origin)
git push origin main # 推送到指定分支
git push -u origin feature-xxx # 推送并建立上游关联(首次推送常用)
git push --force # 强制推送(慎用!)
git push --force-with-lease # 安全强制推送(检查远程是否有新提交)
git pull # 拉取并合并(相当于 git fetch + git merge)
git pull --rebase # 拉取并变基(推荐,保持历史线性)
git fetch # 获取远程更新但不合并
git fetch origin # 获取指定远程的更新
git fetch --prune # 获取更新并清理已删除的远程分支
常见推送问题解决
# 推送被拒绝(远程有本地没有的提交)
git pull --rebase # 先变基拉取
git push # 再推送
# 或
git fetch
git rebase origin/main
git push
5. 查看历史与状态
git status # 查看工作区状态
git status -s # 简洁模式(-s = short)
git log # 查看提交历史
git log --oneline # 一行显示
git log --graph # 以图形显示分支
git log --oneline --graph --all # 最常用组合
git log -5 # 只看最近 5 条
git log --author="张三" # 按作者过滤
git log --since="2024-01-01" # 按时间过滤
git log --grep="fix" # 按提交信息搜索
git log -p # 显示每次提交的 diff
git log --stat # 显示变更文件统计
git show # 显示最新提交详情
git show <commit-hash> # 显示某次提交详情
git show HEAD # 显示当前最新提交
查看文件差异
git diff # 工作区 vs 暂存区(未暂存的变更)
git diff --staged # 暂存区 vs 最近提交(已暂存的变更)
git diff HEAD # 工作区 vs 最近提交
git diff main..feature # 两个分支对比
git diff <commit1> <commit2> # 两次提交对比
git diff --name-only # 只显示变更文件名
6. 撤销与回退
工作区撤销
git restore file.txt # 撤销工作区的修改(新版)
git checkout -- file.txt # 同上(旧版写法)
git restore . # 撤销所有未暂存的修改
暂存区撤销
git restore --staged file.txt # 取消暂存(从暂存区移回工作区)
git reset HEAD file.txt # 同上(旧版写法)
提交撤销
git reset --soft HEAD~1 # 撤销最近一次提交,保留工作区和暂存区内容
git reset --mixed HEAD~1 # 撤销最近一次提交,保留工作区,清空暂存区(默认)
git reset --hard HEAD~1 # 撤销最近一次提交,工作区和暂存区全部丢弃(⚠️ 慎用!)
git reset --hard <commit-hash> # 回退到指定提交(丢弃中间所有提交)
git revert HEAD # 生成一个新的提交来撤销上一次提交(推荐用于公共分支)
git revert <commit-hash> # 撤销某次特定提交
resetvsrevert:reset会删除历史,不要在公共分支使用;revert安全地生成反向提交,适合任何分支。
7. 暂存与储藏
当你需要切换分支但不想提交当前工作进度时:
git stash # 储藏当前修改
git stash save "描述信息" # 带描述的储藏
git stash list # 查看所有储藏列表
git stash pop # 恢复最近一次储藏并删除它
git stash apply # 恢复最近一次储藏但不删除
git stash apply stash@{2} # 恢复指定储藏
git stash drop stash@{0} # 删除指定储藏
git stash clear # 清空所有储藏
git stash branch feature-xxx # 从储藏创建新分支(可在冲突时恢复)
8. 标签管理
git tag # 列出所有标签
git tag -l "v2.*" # 按模式搜索标签
git tag v1.0.0 # 创建轻量标签
git tag -a v1.0.0 -m "发布 v1.0.0" # 创建附注标签(推荐)
git tag -a v1.0.0 <commit-hash> -m "对历史提交打标签"
git push origin v1.0.0 # 推送单个标签
git push origin --tags # 推送所有标签
git tag -d v1.0.0 # 删除本地标签
git push origin --delete v1.0.0 # 删除远程标签
git describe # 显示最近的标签名(常用于版本号自动生成)
语义化版本(SemVer)
v主版本.次版本.修订号
# 示例
v1.0.0 # 首个稳定版本
v1.1.0 # 新增功能
v1.1.1 # 修复 bug
v2.0.0 # 不兼容的 API 变更
9. 合并与变基
合并(Merge)
git checkout main
git merge feature-login # 将 feature-login 合并到 main
git merge --no-ff feature-login # 禁用快进合并(保留分支历史)
// --no-ff 的效果
// 不加 --no-ff(快进,历史是直线)
main: A---B---C
↑ 看不出来曾有过 feature 分支
// 加 --no-ff(保留分支节点)
main: A---B---C---D
\ /
feature
变基(Rebase)
git checkout feature
git rebase main # 将 feature 分支变基到 main 之上
# 交互式变基(整理提交历史)
git rebase -i HEAD~3 # 交互式修改最近 3 次提交
交互式变基提供的操作:
| 命令 | 缩写 | 含义 |
|---|---|---|
pick |
p |
保留该提交 |
reword |
r |
保留但修改提交信息 |
edit |
e |
保留但修改提交内容 |
squash |
s |
合并到上一个提交 |
fixup |
f |
合并到上一个提交并丢弃提交信息 |
drop |
d |
删除该提交 |
解决冲突
# 合并或变基时出现冲突
# 1. 打开文件,搜索 <<<<<<<, =======, >>>>>>>
# 2. 手动保留需要的代码,删除冲突标记
# 3. 保存文件
git add file.txt # 标记冲突已解决
git commit # 完成合并(merge 时)
git rebase --continue # 继续变基(rebase 时)
git rebase --abort # 放弃变基,回到开始前状态
git merge --abort # 放弃合并,回到开始前状态
10. 高级技巧
二分查找(Bisect)
快速定位引入 bug 的提交:
git bisect start
git bisect bad # 标记当前版本为有 bug
git bisect good v1.0.0 # 标记一个已知的好版本
# Git 会帮你二分查找,每次告诉你还剩多少步
# 测试后标记:
git bisect good # 当前版本无 bug
git bisect bad # 当前版本有 bug
# 重复直到找到第一个有 bug 的提交
git bisect reset # 结束 bisect
查找谁修改了某行
git blame file.txt # 查看每行是谁改的
git blame -L 10,20 file.txt # 只看第 10-20 行
git blame -w file.txt # 忽略空格变更
清理
git clean -n # 预览将被删除的未跟踪文件
git clean -f # 删除未跟踪文件
git clean -fd # 删除未跟踪文件和目录
选择提交(Cherry-pick)
# 将某个分支的特定提交应用到当前分支
git cherry-pick <commit-hash>
git cherry-pick <hash1> <hash2> # 挑选多个提交
git cherry-pick A..B # 挑选 A 到 B 之间(不含 A)的所有提交
子模块
git submodule add <url> path # 添加子模块
git clone --recurse-submodules <url> # 克隆项目并初始化子模块
git submodule update --init --recursive # 拉取所有子模块更新
11. 常见工作流
个人项目(最简单)
git init
git add .
git commit -m "init"
git remote add origin <url>
git push -u origin main
# 日常:
git add . && git commit -m "xxx" && git push
功能分支工作流(Feature Branch)
# 从 main 创建功能分支
git checkout -b feature/user-profile
# 在功能分支上开发
git add . && git commit -m "feat: 添加用户资料页"
# 同步主分支(定期变基)
git fetch origin
git rebase origin/main
# 提交 PR / Merge Request 前
git rebase -i HEAD~3 # 整理提交历史
git push -u origin feature/user-profile
# 合并到 main(通常通过 PR 在平台操作)
git checkout main
git pull
git branch -d feature/user-profile
Git Flow
# 经典分支模型
main # 生产分支,保持稳定
develop # 开发主分支
feature/* # 功能分支,基于 develop
release/* # 发布分支,基于 develop
hotfix/* # 紧急修复,基于 main
紧急修复(Hotfix)
git checkout main
git checkout -b hotfix/crash-fix
# 修复代码
git add . && git commit -m "fix: 修复崩溃"
git push -u origin hotfix/crash-fix
# 合并到 main 和 develop
附:配置速查表
.gitignore 常用模式
# 编译产物
*.exe
*.dll
*.so
*.o
*.class
target/
build/
dist/
# 依赖
node_modules/
vendor/
.venv/
# 环境与配置
.env
.env.local
*.config.js
# IDE
.idea/
.vscode/
*.swp
*.swo
.DS_Store
Thumbs.db
# 日志与临时文件
*.log
*.tmp
.gitattributes 常见配置
# 文本文件自动转换换行符
* text=auto
# 指定特定文件的换行符
*.sh text eol=lf
*.bat text eol=crlf
# 二进制文件声明
*.png binary
*.jpg binary
*.zip binary
常用命令速查卡
| 操作 | 命令 |
|---|---|
| 初始化 | git init |
| 克隆 | git clone <url> |
| 添加 | git add . |
| 提交 | git commit -m "msg" |
| 推送 | git push |
| 拉取 | git pull --rebase |
| 创建分支 | git switch -c <name> |
| 切换分支 | git switch <name> |
| 合并分支 | git merge <name> |
| 查看状态 | git status |
| 查看历史 | git log --oneline --graph |
| 撤销工作区 | git restore <file> |
| 撤销暂存区 | git restore --staged <file> |
| 储藏 | git stash |
| 恢复储藏 | git stash pop |
| 打标签 | git tag -a v1.0 -m "msg" |
| 推送标签 | git push --tags |
生成时间:2025-01
数据来源:Git 官方文档、Pro Git 书籍、社区实践总结