Git 基本操作
00:00
add、commit、diff、log 与撤销操作。
1. Git 工作区、暂存区和本地仓库
1.1 概念解释
- 工作区(Working Directory):项目目录下用户直接编辑的文件区域
- 暂存区(Staging Area):位于
.git/index文件中,用于保存即将提交的文件列表 - 本地仓库(Local Repository):位于
.git目录中,包含了完整的项目历史
1.2 文件状态
Git 中的文件有两种状态:
- 已追踪(Tracked):已被纳入版本控制的文件
- 未修改(Unmodified)
- 已修改(Modified)
- 已暂存(Staged)
- 未追踪(Untracked):不在版本控制中的新文件
1.3 文件状态流转
未追踪 ──git add──> 已暂存 ──git commit──> 未修改
^ |
| v
└── rm / 删除文件 <── 已修改 <── 编辑文件 ──┘
2. 状态管理
2.1 查看状态
git status
输出说明:
Changes to be committed:暂存区中的文件(已暂存)Changes not staged for commit:工作区中已修改但未暂存的文件Untracked files:未追踪的新文件
2.2 简略格式
git status -s
输出标记:
??:未追踪的文件A:新添加到暂存区的文件M:已修改的文件D:已删除的文件
3. 暂存与提交
3.1 暂存操作
# 暂存单个文件
git add <file>
# 暂存所有文件
git add .
# 暂存所有已追踪文件的修改
git add -u
# 交互式暂存
git add -p
3.2 提交操作
# 提交暂存区的文件
git commit -m "commit message"
# 提交所有已追踪文件的修改(跳过暂存)
git commit -a -m "commit message"
# 修改最后一次提交
git commit --amend -m "new message"
# 提交空目录(需要在里面添加 .gitkeep)
git add directory/.gitkeep
git commit -m "add directory"
3.3 提交信息规范
推荐格式:
<type>: <subject>
<body>
<footer>
类型(type):
feat:新功能fix:bug 修复docs:文档更新style:格式调整refactor:重构test:测试相关chore:构建/工具相关
4. 查看历史
4.1 查看提交历史
# 查看完整提交历史
git log
# 查看简洁的提交历史
git log --oneline
# 查看最近 N 次提交
git log -n 5
# 查看分支合并历史
git log --graph --oneline --all
# 查看特定文件的修改历史
git log <file>
# 查看某次提交的详细信息
git show <commit-hash>
4.2 查看差异
# 查看工作区与暂存区的差异
git diff
# 查看暂存区与上次提交的差异
git diff --cached
# 查看两个分支的差异
git diff <branch1>..<branch2>
# 查看特定文件的差异
git diff <file>
5. 标签管理
5.1 创建标签
# 创建轻量标签
git tag <tag-name>
# 创建附注标签
git tag -a <tag-name> -m "tag message"
# 为特定提交创建标签
git tag -a <tag-name> <commit-hash> -m "tag message"
5.2 查看和操作标签
# 查看所有标签
git tag
# 查看标签详细信息
git show <tag-name>
# 删除标签
git tag -d <tag-name>
# 推送标签到远程
git push <remote-name> <tag-name>
# 推送所有标签到远程
git push <remote-name> --tags
# 检出到特定标签
git checkout <tag-name>
6. 撤销操作
6.1 撤销工作区修改
# 撤销单个文件的修改
git checkout -- <file>
# 撤销所有文件的修改
git checkout -- .
# 使用 git restore(Git 2.23+)
git restore <file>
git restore .
6.2 撤销暂存
# 撤销暂存(保留工作区修改)
git reset HEAD <file>
# 使用 git restore(Git 2.23+)
git restore --staged <file>
6.3 撤销提交
# 软回退:撤销提交,保留修改在暂存区
git reset --soft HEAD~1
# 混合回退:撤销提交,保留修改在工作区
git reset --mixed HEAD~1
# 硬回退:撤销提交,丢弃所有修改
git reset --hard HEAD~1
6.4 使用 git revert
# 创建一个新提交来撤销指定提交
git revert <commit-hash>
# 撤销多个提交
git revert <commit-hash1> <commit-hash2>
注意:git reset 会改写历史,已推送到远程的提交不建议使用;git revert 是安全的撤销方式,会创建新的提交。
7. 远程仓库操作
7.1 添加和查看远程仓库
# 添加远程仓库
git remote add origin <url>
# 查看远程仓库
git remote -v
# 修改远程仓库 URL
git remote set-url origin <new-url>
# 删除远程仓库
git remote remove origin
7.2 推送和拉取
# 推送到远程仓库
git push origin main
# 拉取远程仓库的更新
git pull origin main
# 获取远程仓库的更新(不合并)
git fetch origin
8. 日常开发流程
8.1 标准开发流程
# 1. 拉取最新代码
git pull origin main
# 2. 创建功能分支
git checkout -b feature/new-feature
# 3. 开发并提交
git add .
git commit -m "feat: add new feature"
# 4. 推送到远程
git push origin feature/new-feature
# 5. 合并到主分支
git checkout main
git merge feature/new-feature
git push origin main
# 6. 删除功能分支
git branch -d feature/new-feature
8.2 紧急修复流程
# 1. 创建修复分支
git checkout -b hotfix/fix-bug
# 2. 修复并提交
git add .
git commit -m "fix: fix critical bug"
# 3. 合并到主分支和开发分支
git checkout main
git merge hotfix/fix-bug
git checkout develop
git merge hotfix/fix-bug
# 4. 删除修复分支
git branch -d hotfix/fix-bug
9. 最佳实践
9.1 提交规范
- 频繁提交:小步快跑,每次提交只做一件事
- 有意义的提交信息:使用规范的提交信息格式
- 不要提交半成品:确保每次提交都是可运行的
9.2 分支管理
- 主分支保持稳定:main 分支始终可部署
- 功能分支开发:每个功能在独立分支上开发
- 及时合并和删除:合并后及时删除功能分支
9.3 常用快捷命令
| 命令 | 说明 |
|---|---|
git stash | 暂存当前修改 |
git stash pop | 恢复暂存的修改 |
git stash list | 查看暂存列表 |
git cherry-pick <hash> | 选择性合并某个提交 |
git rebase main | 变基到 main 分支 |
git bisect | 二分查找引入 bug 的提交 |
更新日志 (Changelog)
- 2026-05-03: 重新格式化并扩写内容,补充文件状态流转图、撤销操作详解、远程仓库操作和日常开发流程