Git学习手册

7 阅读8分钟

Git 学习手册

目录

  1. Git 简介
  2. Git 工作流程
  3. 安装与配置
  4. 基础操作
  5. 分支管理
  6. 远程仓库
  7. 团队协作
  8. 前端开发常用场景
  9. 常见问题

1. Git 简介

1.1 什么是 Git

Git 是一个分布式版本控制系统,用于跟踪文件的变化,方便多人协作开发。

1.2 核心特点

特点说明
分布式每个开发者都有完整的仓库副本
速度快本地操作,无需网络
分支友好创建、切换分支成本极低
安全性高SHA-1 哈希校验

1.3 Git vs SVN

对比项GitSVN
架构分布式集中式
本地操作支持不支持
分支轻量级重量级
离线工作支持不支持

2. Git 工作流程

Git 工作流程图

2.1 四个区域

 ┌─────────────┐    add    ┌──────────────┐    commit    ┌──────────────────┐
 │  workspace  │ ────────> │ staging area │ ───────────>local repository │
 │   (工作区)  │           │    (暂存区)   │             │    (本地仓库)     │
 └─────────────┘           └──────────────┘              └────────┬─────────┘
        ^                                                       │
        │ checkout                                              │ push
        │                                                       │
        │    ┌──────────────────┐    fetch/clone    ┌──────────▼──────────┐
        └─── │ local repository │ <──────────────── │ remote repository   │
             └──────────────────┘                   │     (远程仓库)      │
                                                    └─────────────────────┘

2.2 区域说明

区域说明对应文件
工作区电脑上实际修改的文件项目文件
暂存区准备提交的文件快照.git/index
本地仓库保存所有提交记录.git/ 目录
远程仓库服务器上的仓库GitHub/GitLab

2.3 文件状态

在Git中,文件可以处于四种基本状态:未跟踪(Untracked)未修改(Unmodified)已修改(Modified)已暂存(Staged)。这些状态反映了文件在工作区、暂存区和版本库之间的转换过程

 ┌──────────┐     git add      ┌──────────┐     git commit      ┌──────────┐
 │  untrack │ ───────────────> │  staged  │ ──────────────────> │ committed│
 │  (未跟踪) │                 │  (已暂存) │                    │ (已提交)  │
 └──────────┘                  └──────────┘                     └──────────┘
                                  │
                                  │ git checkout
                                  ▼
                                ┌──────────┐
                                │ modified │
                                │ (已修改) │
                                └──────────┘

3. 安装与配置

3.1 安装

 # macOS
 brew install git
 ​
 # Windows
 # 下载安装包: https://git-scm.com/?hl=zh-cn
 ​
 # 验证安装
 git --version

git下载.png

3.2 配置用户信息

 # 配置用户名和邮箱(首次使用必须配置)
 git config --global user.name "你的名字"
 git config --global user.email "你的邮箱@example.com"
 ​
 # 查看配置
 git config --list

3.3 配置别名(可选但推荐)

 # 配置常用别名
 git config --global alias.st status  // 使用 git st 来代替 git status,下列类同
 git config --global alias.ci commit
 git config --global alias.co checkout
 git config --global alias.br branch
 git config --global alias.logg "log --oneline --graph --all"

3.4 配置编辑器

 # 使用 VS Code 作为默认编辑器
 git config --global core.editor "code --wait"

4. 基础操作

4.1 初始化仓库

 # 在当前目录初始化 Git 仓库
 git init
 ​
 # 克隆远程仓库到本地
 git clone <仓库地址>
 ​
 # 克隆指定分支
 git clone -b <分支名> <仓库地址>
 

下载.png

4.2 查看状态

 # 查看当前工作区状态
 git status
 ​
 # 简洁输出
 git status -s

4.3 添加文件到暂存区

# 添加单个文件
git add <文件名>

# 添加所有文件
git add .

# 添加指定类型文件
git add *.js

# 添加目录
git add src/

# 交互式添加(可选择具体修改)
git add -i

4.4 提交

# 提交暂存区文件,需要输入提交信息
git commit

# 提交并附带消息
git commit -m "提交消息"

# 跳过暂存区,直接提交已跟踪的修改
git commit -a -m "提交消息"

# 修改上次提交(谨慎使用)
git commit --amend -m "新的提交消息"

4.5 查看提交历史

# 查看所有提交记录
git log

# 简洁输出(推荐)
git log --oneline

# 图形化展示分支
git log --oneline --graph

# 查看指定文件的提交历史
git log <文件名>

# 查看最近 N 条提交
git log -n 5

# 查看提交详情(包括修改内容)
git show <提交ID>

4.6 撤销操作

# 撤销工作区的修改(恢复到上次提交的状态)
git checkout -- <文件名>

# 撤销暂存区的修改(回到工作区)
git reset HEAD <文件名>

# 撤销最近一次提交(保留修改到工作区)
git reset --soft HEAD~1

# 撤销最近一次提交(丢弃修改)
git reset --hard HEAD~1

# 恢复已删除的文件
git checkout HEAD -- <文件名>

4.7 暂存操作

# 暂存当前工作区的修改
git stash

# 查看暂存列表
git stash list

# 恢复最近一次暂存
git stash pop

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

# 删除暂存
git stash drop stash@{0}

# 清空所有暂存
git stash clear

5. 分支管理

5.1 分支概念

main ──────┬─────┬─────>
           │     │
     feature/login    bugfix/issue-123

5.2 常用分支命令

# 查看所有分支
git branch -a

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

# 创建并切换到新分支
git checkout -b <分支名>

# 切换分支
git checkout <分支名>

# 删除本地分支
git branch -d <分支名>

# 强制删除分支(未合并的分支)
git branch -D <分支名>

# 删除远程分支
git push origin --delete <分支名>

5.3 合并分支

# 切换到目标分支
git checkout main

# 合并指定分支
git merge <分支名>

# 查看合并冲突
git status

# 解决冲突后提交
git add .
git commit -m "合并分支"

5.4 分支策略

Git Flow(传统)
main ──────────────────────────────────────────────>
       │     │     │     │
       v     v     v     v
   develop ──────────────────────────────────────>
              │     │     │
              v     v     v
        feature/xxx   release/1.0   hotfix/xxx
分支用途
main生产环境代码
develop开发分支
feature/*功能开发
release/*版本发布
hotfix/*紧急修复
Trunk-Based Development(现代)
main ──────────────────────────────────────────────>
       │     │     │     │
       v     v     v     v
   feature/xxx  feature/yyy  feature/zzz
GitHub Flow(简单)
main ──────────────────────────────────────────────>
       │     │     │
       v     v     v
   feature/xxx  bugfix/yyy  docs/zzz

6. 远程仓库

6.1 添加远程仓库

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

# 查看远程仓库
git remote -v

# 修改远程仓库地址
git remote set-url origin <新地址>

# 删除远程仓库
git remote remove origin

6.2 推送与拉取

# 推送到远程仓库(首次推送)
git push -u origin <分支名>

# 推送到远程仓库
git push

# 从远程拉取(不合并)
git fetch

# 从远程拉取并合并(推荐)
git pull

# 强制推送(谨慎使用)
git push --force

6.3 同步远程分支

# 获取所有远程分支信息
git fetch origin

# 创建本地分支跟踪远程分支
git checkout -b <本地分支名> origin/<远程分支名>

# 更新远程分支列表
git remote prune origin

7. 团队协作

7.1 协作流程

1. 克隆仓库
git clone <仓库地址>

2. 创建功能分支
git checkout -b feature/user-login

3. 开发代码
# 编写代码...

4. 提交代码
git add .
git commit -m "feat: 添加用户登录功能"

5. 拉取最新代码(避免冲突)
git pull origin main

6. 推送分支
git push -u origin feature/user-login

7. 创建 Pull Request / Merge Request

8. 代码审查通过后合并

7.2 代码审查规范

# 提交信息规范(Conventional Commits)
# 格式:<类型>(<范围>): <描述>

feat(auth): 添加用户登录功能
fix(api): 修复接口超时问题
docs(readme): 更新项目文档
style(css): 优化样式代码
refactor(utils): 重构工具函数
test(login): 添加登录测试用例
chore(deps): 更新依赖版本

7.3 冲突解决

# 当 git pull 出现冲突时
# 1. 查看冲突文件
git status

# 2. 打开冲突文件,手动解决冲突
<<<<<<< HEAD
    我的代码
=======
    对方的代码
>>>>>>> feature/xxx

# 3. 标记冲突已解决
git add <文件名>

# 4. 提交合并结果
git commit -m "合并冲突"

8. 前端开发常用场景

8.1 创建新项目

# 初始化项目
mkdir my-project
cd my-project
git init

# 创建必要文件
echo "# My Project" > README.md
touch .gitignore
touch index.html

# 添加并提交
git add .
git commit -m "init: 初始化项目"

# 关联远程仓库
git remote add origin <仓库地址>
git push -u origin main

8.2 开发功能

# 创建功能分支
git checkout -b feature/add-component

# 开发代码
# 编写组件...

# 提交代码(多次小提交)
git add src/components/Button.jsx
git commit -m "feat: 创建 Button 组件"

git add src/components/Modal.jsx
git commit -m "feat: 创建 Modal 组件"

# 推送分支
git push -u origin feature/add-component

8.3 处理构建产物

# .gitignore 文件示例(前端项目)
node_modules/
dist/
build/
.env
.env.local
.DS_Store
*.log

8.4 版本发布

# 创建标签
git tag v1.0.0

# 推送标签到远程
git push origin v1.0.0

# 查看所有标签
git tag

# 删除标签
git tag -d v1.0.0
git push origin :v1.0.0

8.5 回滚到指定版本

# 查看提交历史
git log --oneline

# 回滚到指定版本(保留修改)
git revert <提交ID>

# 强制回滚到指定版本(丢弃后续提交)
git reset --hard <提交ID>
git push --force

9. 常见问题

9.1 忘记提交就切换分支

# 方法1: 暂存当前修改
git stash
git checkout <分支名>
git stash pop

# 方法2: 提交当前修改
git add .
git commit -m "temp: 临时提交"
git checkout <分支名>

9.2 误删分支

# 查看最近的操作记录
git reflog

# 恢复分支(找到删除前的提交ID)
git checkout -b <分支名> <提交ID>

9.3 提交信息写错

# 修改最近一次提交信息
git commit --amend -m "正确的提交信息"

# 如果已经推送到远程,需要强制推送
git push --force

9.4 强制覆盖本地代码

# 放弃所有本地修改,强制同步远程
git fetch origin
git reset --hard origin/main

9.5 查看某个文件的修改历史

# 查看文件的所有提交记录
git log <文件名>

# 查看具体修改内容
git log -p <文件名>

# 查看最近一次修改
git show HEAD -- <文件名>

附录:常用命令速查

命令说明
git init初始化仓库
git clone <url>克隆仓库
git status查看状态
git add <file>添加到暂存区
git commit -m <msg>提交
git log查看提交历史
git branch管理分支
git checkout <branch>切换分支
git merge <branch>合并分支
git push推送到远程
git pull拉取远程代码
git stash暂存修改
git reset重置提交
git revert回滚提交

学习建议:先掌握基础操作,再学习分支管理和团队协作。多实践,遇到问题不要害怕,Git 几乎所有操作都可以撤销!