分布式版本控制系统Git
作者:YXN-python 阅读量:71 发布日期:2025-01-02
Git 是一个强大的分布式版本控制系统,掌握其核心用法和高级技巧可以极大提升开发效率。以下从基础到深度用法的系统性总结,涵盖常用场景和进阶技巧:
一、入门必备
1. 安装与配置
安装 Git
sudo apt-get install git # Ubuntu/Debian
brew install git # macOS
配置用户信息
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
2. 基础命令
git init # 初始化仓库
git add <file> # 添加文件到暂存区
git commit -m "message" # 提交到本地仓库
git status # 查看工作区状态
git log # 查看提交历史
git clone <url> # 克隆远程仓库
3. 核心概念
- 工作区(Working Directory):本地修改的文件。
- 暂存区(Staging Area):通过 git add 暂存的修改。
- 本地仓库(Local Repository):通过 git commit 提交的版本。
- 远程仓库(Remote Repository):如 GitHub、GitLab 等托管平台。
二、进阶技巧
1. 分支管理
git branch # 查看分支
git branch <name> # 创建分支
git checkout <branch> # 切换分支
git merge <branch> # 合并分支(默认快进合并)
git merge --no-ff <branch> # 强制生成合并提交
git rebase <branch> # 变基(重写提交历史)
2. 撤销与回退
git restore <file> # 撤销工作区修改
git restore --staged <file> # 撤销暂存区修改
git reset --soft HEAD^ # 撤销最后一次提交,保留修改到暂存区
git reset --hard HEAD^ # 彻底回退到上一个提交(慎用!)
git revert <commit-hash> # 生成一个反向提交,安全撤销历史修改
3. 查看差异与历史
git diff # 工作区与暂存区差异
git diff --cached # 暂存区与最新提交的差异
git blame <file> # 查看文件每一行的修改者
git show <commit-hash> # 查看某次提交的详细信息
三、深度用法
1. 暂存与恢复临时工作
git stash # 临时保存未提交的修改
git stash pop # 恢复最近一次暂存的修改
git stash list # 查看所有暂存记录
2. 精准提交(交互式暂存)
git add -p # 交互式选择代码块添加到暂存区
git commit -p # 直接选择代码块提交(跳过暂存区)
3. 修改提交历史(交互式变基)
git rebase -i HEAD~3 # 修改最近3次提交(可合并、编辑、重排序)
# 常用操作:
# squash(合并提交)、edit(修改提交)、drop(删除提交)
4. 找回丢失的提交
git reflog # 查看所有操作记录(包括被删除的提交)
git reset --hard <commit-hash> # 恢复到指定提交
5. 子模块与子仓库
git submodule add <url> # 添加子模块
git submodule update --init --recursive # 初始化并更新子模块
6. 钩子(Hooks)
在 .git/hooks/ 目录下添加脚本,实现自动化操作:
- pre-commit:提交前运行检查(如代码格式化、测试)。
- post-receive:服务器端收到推送后触发部署。
四、团队协作与工作流
1. 远程仓库操作
git remote -v # 查看远程仓库
git fetch # 拉取远程更新(不合并)
git pull # 拉取并合并远程分支(等价于 git fetch + git merge)
git push -u origin <branch> # 推送本地分支到远程
git push --force-with-lease # 强制推送(覆盖远程分支,慎用!)
2. 分支策略
- Git Flow:适合大型项目,包含 master(生产)、develop(开发)、feature/*(功能分支)、release/*(预发布)、hotfix/*(热修复)等分支。
- GitHub Flow:轻量级策略,仅 main 分支和功能分支,通过 Pull Request(PR)合并代码。
- Trunk-Based Development:持续集成模式,直接在 main 分支开发,适合高频发布。
3. 代码审查与 PR/MR
- 使用 git request-pull 生成代码审查请求。
- 在 GitHub/GitLab 上通过 Pull Request(PR) 或 Merge Request(MR) 协作。
五、高级工具与场景
1. 二分法调试(Git Bisect)
git bisect start # 开始二分查找
git bisect bad # 标记当前提交为“有问题”
git bisect good <commit> # 标记已知正常的提交
# Git 自动切换到中间提交,重复测试直到定位问题代码
2. 大文件存储(Git LFS)
git lfs install # 初始化 Git LFS
git lfs track "*.psd" # 跟踪大文件
git add .gitattributes # 提交配置文件
3. 稀疏检出(Sparse Checkout)
git config core.sparseCheckout true
echo "src/" >> .git/info/sparse-checkout # 仅检出指定目录
git checkout main
六、常见问题解决
误删分支恢复:
git reflog | grep <branch-name> # 找到被删分支的提交哈希
git branch <branch-name> <hash> # 从哈希恢复分支
清理历史大文件:
git filter-branch --tree-filter 'rm -f bigfile.zip' HEAD
git push --force # 强制推送清理后的仓库
合并冲突解决:
- 使用 git mergetool 调用可视化工具(如 meld 或 vscode)。
- 手动编辑冲突文件后执行 git add 和 git commit。
七、推荐学习资源
官方文档:Git Book
交互式练习:Learn Git Branching
深入原理:Pro Git
YXN-python
2025-01-02