您现在的位置是:网站首页 > 博客日记 >

分布式版本控制系统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