跳转至

Git指南

目录


1. 版本控制基础

1.1 什么是版本控制

版本控制是一种记录文件内容变化的系统,它允许你查看历史版本并方便地切换。版本控制的主要功能包括:

  • 协同修改:多人并行修改同一文件
  • 数据备份:保存当前和历史状态
  • 版本管理:高效存储版本(Git采用快照方式)
  • 权限控制:对团队成员进行权限管理
  • 历史记录:查看修改记录,恢复文件到历史状态
  • 分支管理:允许同时推进多个任务

1.2 集中式 vs 分布式版本控制

集中式版本控制(如SVN)

  • 有一个中央服务器保存所有文件版本
  • 开发者从服务器获取最新版本
  • 缺点:服务器故障时无法工作,离线时无法提交

分布式版本控制(如Git)

  • 每个客户端都有完整的代码仓库镜像
  • 可以离线工作,提交到本地后再同步
  • 优点:解决了集中式的单点故障问题

1.3 Git简介

Git是最流行的分布式版本控制系统,由Linus Torvalds创建。它具有以下特点: - 快速高效 - 强大的分支管理 - 分布式架构 - 免费开源


2. Git基础

2.1 安装与配置

安装

git-scm.com 下载适合你系统的版本并安装。

配置

安装后首先配置用户信息:

# 配置用户名
git config --global user.name "你的名字"

# 配置邮箱
git config --global user.email "你的邮箱@example.com"

# 查看配置
git config --list

配置级别优先级: 1. 项目级(--local) 2. 用户级(--global) 3. 系统级(--system

2.2 Git工作机制

Git有三个核心区域:

  • 工作区:你实际编辑的文件
  • 暂存区:临时保存准备提交的更改
  • 本地库:保存历史版本记录

2.3 基本操作流程

  1. 在工作区修改文件
  2. 将修改添加到暂存区(git add
  3. 将暂存区的更改提交到本地库(git commit

2.4 文件状态

Git中的文件有以下状态: - Untracked:未被Git跟踪 - Tracked:已被Git跟踪 - Staged:已暂存 - Unmodified:未修改 - Modified:已修改


3. Git本地操作

3.1 初始化仓库

# 创建新仓库
git init

# 克隆现有仓库
git clone <远程仓库地址>

3.2 暂存与提交

# 查看状态
git status

# 添加文件到暂存区
git add <文件名>
git add .  # 添加所有文件

# 提交到本地库
git commit -m "提交说明"

# 跳过暂存区直接提交已跟踪文件
git commit -a -m "提交说明"

3.3 查看历史

# 查看详细历史
git log

# 简洁显示
git log --oneline

# 图形化显示
git log --graph --oneline --all

# 查看最近n次
git log -n <n>

3.4 版本切换与回退

# 查看操作记录
git reflog

# 回退版本(删除历史)
git reset --soft <commit-hash>  # 只回退HEAD
git reset --mixed <commit-hash> # 回退HEAD和暂存区(默认)
git reset --hard <commit-hash>  # 回退所有

# 撤销提交(保留历史)
git revert <commit-hash>

3.5 工作区操作

# 撤销工作区修改
git checkout -- <文件名>
git restore <文件名>  # Git 2.23+

# 暂存工作进度
git stash
git stash list
git stash pop  # 恢复并删除
git stash apply stash@{n}  # 恢复指定暂存
git stash drop stash@{n}  # 删除指定暂存
git stash clear  # 清空所有

3.6 Git原理简介

哈希算法

Git使用SHA-1哈希算法,特点: - 固定长度输出 - 输入确定则输出确定 - 输入变化则输出变化 - 不可逆

Git保存版本机制

Git采用文件系统快照方式,而非增量存储。每次提交创建当前项目状态的快照。


4. Git分支管理

4.1 分支概述

分支是Git最强大的功能之一,它允许你: - 同时并行开发多个功能 - 隔离不同开发任务 - 一个分支失败不会影响其他分支

Git分支本质上是指向提交的指针。

4.2 基本分支操作

# 查看分支
git branch  # 本地分支
git branch -a  # 所有分支
git branch -v  # 详细信息

# 创建分支
git branch <分支名>

# 创建并切换
git checkout -b <分支名>
git switch -c <分支名>  # Git 2.23+

# 切换分支
git checkout <分支名>
git switch <分支名>  # Git 2.23+

# 删除分支
git branch -d <分支名>  # 删除已合并的
git branch -D <分支名>  # 强制删除

# 修改分支名
git branch -m <旧名> <新名>

4.3 分支合并

# 切换到目标分支
git checkout <目标分支>

# 合并分支
git merge <源分支>

4.4 冲突解决

当两个分支修改了同一文件的同一部分时会发生冲突:

  1. Git会标记冲突文件
  2. 手动打开文件解决冲突(标记为 <<<<<<<=======>>>>>>>
  3. 标记解决:git add <冲突文件>
  4. 提交合并:git commit -m "解决冲突"

4.5 变基操作

变基可以将一个分支的修改应用到另一个分支上,使提交历史更清晰:

# 将当前分支变基到目标分支
git rebase <目标分支>

# 交互式变基(整理提交历史)
git rebase -i <commit-hash>

5. Git标签

5.1 标签概念

标签用于标记项目的重要里程碑(如版本发布),标签是不可移动的。

5.2 标签操作

# 查看标签
git tag

# 创建轻量级标签
git tag <标签名>

# 创建带注释的标签
git tag -a <标签名> -m "标签说明"

# 查看标签详情
git show <标签名>

# 推送标签到远程
git push origin <标签名>
git push origin --tags  # 推送所有

# 删除标签
git tag -d <标签名>  # 本地删除
git push origin --delete <标签名>  # 远程删除

6. Git远程仓库

6.1 远程仓库概述

远程仓库是托管在网络上的Git仓库,用于: - 备份代码 - 团队协作 - 代码分享

6.2 GitHub、Gitee、GitLab介绍

GitHub

  • 全球最大的代码托管平台
  • 开源项目聚集地
  • 提供企业版

Gitee

  • 国内的代码托管平台
  • 速度快
  • 支持中文

GitLab

  • 可自托管
  • 功能强大,适合企业内部使用
  • 内置CI/CD

6.3 远程仓库操作

# 查看远程仓库
git remote
git remote -v  # 详细信息

# 添加远程仓库
git remote add <别名> <地址>

# 推送到远程
git push <别名> <分支>
git push -u origin master  # 首次推送设置上游

# 拉取远程
git fetch <别名>  # 只获取不合并
git pull <别名> <分支>  # 获取并合并

# 删除远程仓库关联
git remote remove <别名>

6.4 SSH免密登录

# 生成SSH密钥
ssh-keygen -t rsa -C "你的邮箱@example.com"

# 复制公钥内容
# Windows:  ~/.ssh/id_rsa.pub
# Linux/Mac:  ~/.ssh/id_rsa.pub

# 在GitHub/Gitee中添加公钥

# 测试连接
ssh -T git@github.com

6.5 团队协作机制

团队内协作

  1. 克隆仓库
  2. 创建分支开发
  3. 推送到远程
  4. 其他成员拉取更新

跨团队协作(Forking)

  1. Fork原仓库到自己账户
  2. 克隆自己的仓库
  3. 创建分支修改
  4. 推送并发起Pull Request
  5. 原仓库维护者审核合并

7. Git工作流

7.1 集中式工作流

像SVN一样,所有修改都提交到master分支,适合小型团队。

7.2 GitFlow工作流

GitFlow是一种成熟的分支管理模型:

  • master:生产环境稳定版本
  • develop:开发集成分支
  • feature/*:功能分支(从develop分出)
  • release/*:发布分支(从develop分出)
  • hotfix/*:紧急修复分支(从master分出)

7.3 Forking工作流

适用于开源项目或不信任贡献者的团队: - 贡献者Fork仓库 - 在自己的仓库开发 - 发起Pull Request - 维护者审核合并

7.4 企业开发实战

典型的企业开发流程: 1. 入职获取Git账号 2. 克隆代码,搭建环境 3. 创建feature分支开发 4. 提交前检查(避免提交测试代码) 5. 合并到test分支测试 6. 测试通过后合并到develop 7. 最终合并到master发布


8. Git进阶操作

8.1 git stash

暂存当前未提交的修改:

# 暂存
git stash save "暂存说明"

# 查看暂存列表
git stash list

# 恢复最近的暂存
git stash pop

# 恢复指定暂存
git stash apply stash@{0}

# 删除暂存
git stash drop stash@{0}
git stash clear  # 清空所有

8.2 git cherry-pick

选择某个提交应用到当前分支:

git cherry-pick <commit-hash>

适用于: - 在其他分支修复了bug,需要应用到当前分支 - 从一个仓库转移提交到另一个仓库

8.3 git bisect

二分查找引入bug的提交:

# 开始查找
git bisect start

# 标记当前版本有问题
git bisect bad

# 标记某个历史版本没问题
git bisect good <commit-hash>

# Git会自动切换到中间版本,测试后继续标记

# 结束查找
git bisect reset

8.4 git blame

查看文件每一行的最后修改者:

git blame <文件名>

9. Git与IDE集成

9.1 IDEA中使用Git

配置与初始化

  1. 安装Git
  2. 在IDEA中配置Git路径
  3. VCS → Enable Version Control Integration → 选择Git

基本操作

  • 添加文件:右键 → Git → Add
  • 提交:右键 → Git → Commit Directory 或快捷键 Ctrl+K
  • 查看历史:右键 → Git → Show History

分支操作

  • 创建/切换:右下角Git分支图标
  • 合并:右下角Git分支图标 → 选择分支 → Merge
  • 冲突解决:IDEA会弹出冲突解决窗口

GitHub集成

  1. File → Settings → Version Control → GitHub
  2. 登录或使用token

9.2 Gitignore配置

什么是.gitignore

用于指定Git应该忽略的文件或目录。

配置语法

# 注释
*.txt          # 忽略所有.txt文件
!important.txt # 不忽略important.txt
/build/        # 忽略build目录
/doc/*.txt     # 忽略doc目录下的txt文件
doc/**/*.pdf   # 递归忽略doc目录下的pdf文件

常用忽略规则

# 编译文件
*.class
target/
build/

# IDE
.idea/
*.iml
*.ipr
*.iws
.vscode/

# 依赖
node_modules/

# 日志
*.log
log/

# 系统
.DS_Store
Thumbs.db

.gitignore不生效

# 清除缓存
git rm -r --cached .
git add .
git commit -m "更新.gitignore"

10. Git最佳实践

10.1 Commit规范

规范格式

<type>(<scope>): <subject>

<body>

<footer>

Type类型

  • feat:新功能
  • fix:修复bug
  • docs:文档
  • style:格式(不影响代码逻辑)
  • refactor:重构
  • perf:性能优化
  • test:测试
  • chore:构建/工具
  • revert:回滚

示例

feat(login): 增加手机号登录功能

- 支持手机号验证码登录
- 添加表单验证

10.2 常见问题解决

上传大文件(Git LFS)

# 安装Git LFS
git lfs install

# 追踪大文件
git lfs track "*.zip"

# 正常提交
git add .gitattributes
git add large-file.zip
git commit -m "添加大文件"
git push

Authentication failed

  1. Windows:控制面板 → 用户账户 → 凭证管理器,删除Git相关凭证
  2. 命令行:git config --system --unset credential.helper

! [rejected] master - master (fetch first)

git pull --rebase origin master
git push origin master

Your local changes would be overwritten by merge

# 方案1:暂存
git stash
git pull
git stash pop

# 方案2:提交本地修改
git add .
git commit -m "保存本地修改"
git pull

11. GitLab集成实战

11.1 GitLab Webhooks与钉钉集成

当我们push代码、合并代码等操作时,可以通过配置钉钉机器人接收消息通知。

配置钉钉机器人

  1. 找一个钉钉群,在智能群助手中添加机器人
  2. 选择GitLab机器人
  3. 给机器人起名字,点击完成
  4. 复制webhook地址

配置GitLab Webhook

  1. 进入GitLab项目
  2. 点击 Settings → Integrations
  3. 添加钉钉webhook URL
  4. 选择需要提醒的事件
  5. 点击Add Webhook

测试

本地push代码,钉钉群应该能收到消息通知。

通过这个机器人,团队可以方便地管理多个项目,随时了解代码提交、合并等操作。


附录

Git常用命令速查

# 配置
git config --global user.name "Name"
git config --global user.email "email@example.com"
git config --list

# 初始化
git init
git clone <url>

# 基本操作
git status
git add <file>
git commit -m "message"

# 分支
git branch
git checkout <branch>
git merge <branch>

# 远程
git remote -v
git push origin <branch>
git pull origin <branch>

扩展阅读

评论