Git 用法解析
Git 是一个分布式版本控制系统,广泛用于软件开发中的代码管理和协作。以下是 Git 的常用用法和一些高级用法,帮助你从入门到进阶。
一、Git 常用用法
1. 初始化仓库
git init # 初始化一个本地仓库
git clone <url> # 克隆远程仓库到本地
2. 配置用户信息
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
3. 查看状态
git status # 查看工作区和暂存区的状态
git log # 查看提交历史
git log --oneline # 简洁查看提交历史
git log --graph # 图形化显示分支合并历史
4. 添加和提交
git add <file> # 将文件添加到暂存区
git add . # 添加所有修改和新增的文件
git commit -m "commit message" # 提交到本地仓库
5. 推送与拉取
git push origin main # 推送本地提交到远程仓库的 main 分支
git pull origin main # 从远程拉取最新代码并合并
git fetch # 获取远程更新,但不自动合并
6. 分支操作
git branch # 查看本地分支
git branch <name> # 创建新分支
git checkout <name> # 切换到指定分支
git switch <name> # 切换分支(Git 2.23+)
git checkout -b <name> # 创建并切换到新分支
git merge <branch> # 合并指定分支到当前分支
git branch -d <name> # 删除本地分支
7. 撤销操作
git restore <file> # 撤销工作区文件的修改(Git 2.23+)
git restore --staged <file> # 将文件从暂存区移出,保留工作区修改
git reset HEAD~1 # 撤销最后一次提交,保留更改在工作区
git reset --hard HEAD~1 # 彻底删除最后一次提交及更改(慎用!)
二、Git 高级用法
1. 重置与变基(Rebase)
适用于整理本地提交历史,不要在公共分支上使用 rebase。
git rebase <branch> # 将当前分支的提交“变基”到目标分支上,使历史更线性
git rebase -i HEAD~3 # 交互式变基,可编辑、合并或删除最近3次提交
2. 储藏(Stashing)
git stash # 临时保存工作区和暂存区的修改
git stash pop # 恢复最近一次储藏的内容并删除
git stash apply # 恢复储藏内容但不删除
git stash list # 查看所有储藏
git stash drop # 删除指定储藏
3. 标签管理
git tag v1.0 # 创建轻量标签
git tag -a v1.0 -m "release 1.0" # 创建带注释的标签
git push origin v1.0 # 推送标签到远程
git push origin --tags # 推送所有标签
4. 检出特定版本
git checkout <commit-hash> # 查看某个历史提交的状态(进入“分离头指针”状态)
git checkout -b <new-branch> <commit-hash> # 基于某次提交创建新分支
5. 查看差异
git diff # 查看工作区与暂存区的差异
git diff --staged # 查看暂存区与上次提交的差异
git diff <commit1> <commit2> -- <file> # 比较两个提交之间的某个文件
6. 修复提交(Amend)
git commit --amend # 修改最后一次提交(可修改信息或添加遗漏文件)
注意:会改变提交哈希,不要用于已推送的提交。
7. 远程分支管理
git remote -v # 查看远程仓库信息
git remote add <name> <url> # 添加新的远程仓库
git push origin <branch> # 推送分支到远程
git push origin --delete <branch> # 删除远程分支
git fetch --prune # 清理本地已不存在的远程分支引用
8. 子模块(Submodule)
git submodule add <url> <path> # 添加子模块
git submodule update --init --recursive # 克隆项目后初始化子模块
9. 高级日志查询
git log --author="John" # 查看某人提交的日志
git log --grep="fix" # 搜索提交信息包含 "fix" 的提交
git log --since="2 weeks ago" --until="1 week ago"
git log -p <file> # 查看某文件的详细修改历史
git blame <file> # 查看文件每行的最后修改者和提交
10. 二分查找(Bisect)
用于查找引入 bug 的提交:
git bisect start
git bisect bad # 当前版本有 bug
git bisect good v1.0 # 指定一个已知良好的版本
# Git 会自动二分检出中间版本,你测试后标记 good/bad
git bisect good|bad
# 找到问题提交后退出
git bisect reset
11. Reflog(引用日志)
非常有用,用于恢复“丢失”的提交。
git reflog # 查看 HEAD 的操作历史(包括 reset、checkout 等)
git reset <HEAD@{n}> # 恢复误删的提交或分支
三、最佳实践建议
- 小步提交:每次提交只做一件事,提交信息清晰。
- 频繁拉取:避免长时间不拉取导致合并冲突。
- 使用分支:功能开发使用特性分支(feature branch),避免直接在 main 上开发。
- 代码审查:使用 Pull Request / Merge Request 进行代码审查。
- .gitignore:合理配置忽略文件(如日志、编译产物)。