Git详细使用教程

Git详细使用教程

_

一、Git 简介

Git 是目前最流行的分布式版本控制系统,用于高效管理项目代码和团队协作。相比传统的集中式版本控制工具(如 SVN),Git 拥有以下特点:

  • 分布式架构:每个开发者都拥有完整的代码仓库副本,支持离线提交

  • 高效的分支管理:分支创建和切换极其轻量,鼓励频繁使用分支

  • 强大的合并能力:支持多种合并策略,灵活整合代码

  • 完整的变更追溯:每次提交都有唯一的哈希标识,历史记录不可篡改

学习 Git 不仅是程序员的基本功,更是高效协作和代码质量保障的关键。

二、Git 核心概念

在开始使用 Git 之前,需要理解四个核心区域:

区域

说明

工作区(Working Directory)

你电脑上看到的项目文件夹,可以直接编辑文件

暂存区(Staging Area / Index)

临时存放即将提交的修改,通过 git add 添加

本地仓库(Local Repository)

存储所有版本历史记录的 .git 目录,通过 git commit 保存

远程仓库(Remote Repository)

托管在服务器上的共享仓库,用于团队协作

基本工作流程

工作区 → git add → 暂存区 → git commit → 本地仓库 → git push → 远程仓库

三、Git 安装

Windows

访问 git-scm.com 下载安装包,一路默认安装即可。安装完成后,右键菜单会出现「Git Bash Here」选项。

macOS

# 使用 Homebrew 安装
brew install git

# 或安装 Xcode Command Line Tools(自带 Git)
xcode-select --install

Linux(Ubuntu/Debian)

sudo apt update
sudo apt install git

安装完成后,验证是否成功:

git --version

四、初始配置

配置用户信息

Git 提交时必须关联用户信息,用于标识提交者,是团队协作和代码追溯的基础。

# 全局配置(对所有项目生效)
git config --global user.name "你的姓名"
git config --global user.email "你的邮箱"

# 仅当前项目配置(优先级更高)
git config user.name "项目专用姓名"
git config user.email "项目专用邮箱"

建议:确保邮箱与 GitHub/GitLab 账号一致,以便提交记录正确关联。

其他推荐配置

# 启用命令行颜色高亮
git config --global color.ui auto

# 配置默认编辑器
git config --global core.editor "code --wait"  # VS Code
git config --global core.editor "vim"

# 跨平台换行符处理(Windows 用户推荐)
git config --global core.autocrlf true

# 查看所有配置
git config --list

五、基础操作

1. 创建 / 获取仓库

# 初始化一个新的本地仓库
git init

# 在指定目录下初始化仓库
git init 项目名称

# 克隆远程仓库到本地
git clone https://github.com/用户名/仓库名.git

# 克隆指定分支
git clone -b 分支名 仓库地址

# 浅克隆(仅拉取最近一次提交,加速下载)
git clone <url> --depth=1

2. 查看状态与历史

# 查看工作区和暂存区状态
git status
git status -s  # 精简一行输出

# 查看提交历史
git log
git log --oneline  # 一行精简展示
git log --graph --all --oneline  # 图形化展示全部分支历史
git log --author="姓名"  # 查看某人提交记录
git log --grep="关键词"  # 搜索提交信息

3. 添加文件到暂存区

git add <文件名>  # 添加指定文件
git add .  # 添加当前目录所有变更(包括新文件)
git add -u  # 只添加已被跟踪的修改/删除文件
git add -A  # 添加所有变更

4. 提交到本地仓库

git commit -m "提交说明"

# 跳过 add,直接提交已跟踪文件的修改
git commit -am "提交说明"

# 修改最近一次提交(补充遗漏的文件或修改提交信息)
git commit --amend

提交信息规范建议

  • 使用动词开头(如 fixaddupdaterefactor

  • 简洁明确,说明「做了什么」和「为什么」

  • 示例:fix: prevent crash when user input is empty

5. 查看差异

git diff  # 工作区 vs 暂存区
git diff --staged  # 暂存区 vs 版本库
git diff HEAD  # 工作区 vs 最新版本
git diff <commit1> <commit2>  # 比较两次提交的差异

6. 撤销操作

# 撤销工作区文件的修改
git restore <文件>
# 或(旧命令)
git checkout -- <文件>

# 将文件从暂存区移回工作区
git restore --staged <文件>
# 或(旧命令)
git reset HEAD <文件>

# 回退到指定提交
git reset --soft <commit-id>  # 保留工作区和暂存区的改动
git reset --mixed <commit-id>  # 保留工作区改动,清空暂存区(默认)
git reset --hard <commit-id>  # 丢弃所有改动,谨慎使用!

# 反做某次提交(生成一个新的反向提交,保留历史)
git revert <commit-id>

7. 忽略文件(.gitignore)

在项目根目录创建 .gitignore 文件,列出无需 Git 跟踪的文件或目录:

# 依赖目录
node_modules/
vendor/

# 日志文件
*.log

# 环境配置
.env
.env.local

# 操作系统文件
.DS_Store
Thumbs.db

# IDE 配置
.idea/
.vscode/

六、分支管理

分支是 Git 的核心功能之一,允许开发者并行开发、互不干扰。

1. 查看与创建分支

# 查看本地分支
git branch

# 查看所有分支(包括远程)
git branch -a

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

# 创建并切换到新分支
git checkout -b <分支名>
# 或(Git 2.23+ 推荐)
git switch -c <分支名>

2. 切换分支

git checkout <分支名>
# 或(推荐的新命令)
git switch <分支名>

3. 合并分支

# 将指定分支合并到当前分支
git merge <待合并分支>

# 禁用快进合并,保留合并记录(推荐用于公共分支)
git merge --no-ff <待合并分支>

4. 删除分支

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

5. 重命名分支

git branch -m <旧名称> <新名称>

6. Merge vs Rebase

这是 Git 中两个重要且容易混淆的合并方式:

对比维度

Merge

Rebase

提交历史

保留完整历史,有合并提交

生成线性历史,更加整洁

历史记录

分支结构清晰可见

看起来像一条直线开发

适用场景

团队协作、公共分支合并

本地分支整理、同步主分支

SHA 值

保持不变

会改变(重写历史)

Merge 示例

git checkout main
git merge feature-login
# 会产生一个新的合并提交

Rebase 示例

git checkout feature-login
git rebase main

# 解决冲突后继续
git add .
git rebase --continue

# 变基后再合并(快进合并,无额外提交)
git checkout main
git merge feature-login

⚠️ 重要提醒:永远不要对已经推送到远程的公共分支执行 rebase,否则会导致协作混乱!

七、远程协作

1. 管理远程仓库

# 查看已关联的远程仓库
git remote -v

# 添加远程仓库(origin 为默认别名)
git remote add origin 远程仓库地址

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

# 删除远程仓库关联
git remote remove origin

2. 推送代码

# 推送本地分支到远程
git push origin <分支名>

# 首次推送并关联远程分支(之后可直接用 git push)
git push -u origin <分支名>

# 强制推送(谨慎使用!会覆盖远程历史)
git push --force origin <分支名>

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

3. 拉取更新

# 获取远程更新但不合并(推荐)
git fetch
git diff origin/main  # 先查看差异

# 拉取远程更新并自动合并
git pull origin main

# 拉取并变基(保持历史线性)
git pull --rebase origin main

⚠️ 注意git pull 等价于 git fetch + git merge,可能触发自动合并,若存在冲突需手动解决。

4. 解决合并冲突

git pullgit mergegit rebase 时,若同一文件被不同分支修改,会触发冲突。

解决步骤

# 1. 查看冲突文件
git status

# 2. 编辑冲突文件,Git 会标记冲突区域:
# <<<<<<< HEAD
# 当前分支的内容
# =======
# 其他分支的内容
# >>>>>>> 分支名

# 3. 手动删除冲突标记,保留想要的代码

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

# 5. 继续操作
git merge --continue   # merge 场景
git rebase --continue  # rebase 场景

在 VS Code 等编辑器中,冲突区域上方会提供图形化按钮,可以一键选择保留当前修改、保留远程修改或同时保留两者,非常便捷。

八、Pull Request 工作流

Pull Request(PR)是协作开发的核心环节,用于请求将代码从一个分支合并到另一个分支(通常是 main)。

基本流程

# 1. 创建功能分支
git checkout -b feat/user-login

# 2. 开发并提交
git add .
git commit -m "feat: add user login feature"

# 3. 推送到远程
git push -u origin feat/user-login

# 4. 在 GitHub/GitLab 上创建 Pull Request
# 填写标题、描述,指定审阅者

解决 PR 中的冲突

如果 PR 显示与 main 分支有冲突,可以将 main 合并到你的 PR 分支:

git checkout feat/user-login
git pull origin main
# 解决冲突
git add .
git commit -m "resolve conflicts with main"
git push

九、标签管理

标签用于标记重要的版本节点(如发布版本)。

# 查看所有标签
git tag

# 创建轻量标签
git tag v1.0.0

# 创建附注标签(推荐,包含详细信息)
git tag -a v1.0.0 -m "Release version 1.0.0"

# 查看标签详情
git show v1.0.0

# 推送标签到远程
git push origin v1.0.0
git push origin --tags  # 推送所有标签

# 删除标签
git tag -d v1.0.0  # 本地删除
git push origin --delete v1.0.0  # 远程删除

十、进阶技巧

1. git stash:临时保存修改

当你正在开发中,突然需要切换分支处理紧急任务时使用:

# 临时保存当前修改
git stash
git stash save "未完成的登录页逻辑"  # 带备注

# 查看所有 stash
git stash list

# 恢复最近一次 stash
git stash pop  # 恢复并删除 stash
git stash apply  # 恢复但不删除

# 删除 stash
git stash drop

2. git cherry-pick:挑选提交

将某个特定提交应用到当前分支,而无需合并整个分支:

git checkout main
git cherry-pick <commit-hash>

适用场景:从功能分支中挑选某个已完成的小功能合并到主分支。

3. git reflog:找回丢失的提交

当你误操作 git reset --hard 后,可以通过 reflog 找回丢失的代码:

# 查看所有 HEAD 移动记录
git reflog

# 回到某个历史位置
git checkout HEAD@{3}

# 或基于 reflog 创建新分支恢复
git branch recovery-branch HEAD@{3}

Git 会保留所有 HEAD 移动记录(默认 90 天),几乎不可能真正「丢失」提交。

4. git bisect:二分查找 Bug 引入点

当你不确定哪个提交引入了 Bug 时,bisect 可以高效定位:

git bisect start
git bisect bad  # 标记当前版本有 Bug
git bisect good <commit-hash>  # 标记一个确定没 Bug 的版本

# Git 会自动切换到一个中间版本,测试后标记
git bisect good  # 这个版本没问题
# 或
git bisect bad  # 这个版本有问题

# 重复上述步骤,Git 最终会找出引入 Bug 的提交
git bisect reset  # 结束二分查找

5. 交互式变基(整理提交历史)

git rebase -i HEAD~5  # 整理最近 5 次提交

交互界面中可以:

  • pick:保留该提交

  • squash:将该提交合并到上一个提交

  • reword:修改提交信息

  • drop:删除该提交

十一、团队协作工作流

1. GitHub Flow(推荐)

GitHub Flow 是现代团队最常用的分支工作流,强调简单性和持续交付。

核心原则

  • 单一主分支(main),始终保持可部署状态

  • 所有开发工作在短期功能分支中进行

  • 通过 Pull Request 进行代码审查和合并

  • 合并后自动触发部署

适用场景:大多数团队,特别是采用持续交付/持续部署的团队。

2. Git Flow

适合有正式发布周期的项目,包含五种分支类型:

分支

说明

main

生产就绪代码,只合并已测试的分支

develop

开发主干,汇集各功能分支的代码

feature

功能分支,从 develop 分出

release

发布准备分支,进行最终测试和修复

hotfix

紧急修复分支,从 main 分出,修复后合并回 main 和 develop

适用场景:大型团队、版本发布周期明确的项目。

3. 分支命名规范

feat/功能描述     # 新功能开发
fix/问题描述      # Bug 修复
docs/文档说明     # 文档更新
refactor/重构内容  # 代码重构
chore/杂项任务     # 构建、工具链等

示例:feat/user-authenticationfix/login-crash

4. 提交信息规范(Conventional Commits)

<type>: <subject>

[optional body]

[optional footer]

常用类型:

  • feat: 新功能

  • fix: Bug 修复

  • docs: 文档更新

  • style: 代码格式调整(不影响功能)

  • refactor: 代码重构

  • perf: 性能优化

  • test: 测试相关

  • chore: 构建或辅助工具变动

示例:

feat: add password reset functionality

- Add reset token generation
- Send email with reset link
- Add password update endpoint

Closes #123

十二、命令速查表

分类

命令

说明

配置

git config --global user.name "Name"

设置用户名

配置

git config --global user.email "Email"

设置邮箱

仓库

git init

初始化本地仓库

仓库

git clone <url>

克隆远程仓库

日常

git status

查看状态

日常

git add <file>

添加文件到暂存区

日常

git commit -m "msg"

提交到本地仓库

日常

git push

推送到远程

日常

git pull

拉取远程更新

分支

git branch

查看分支列表

分支

git checkout -b <branch>

创建并切换分支

分支

git merge <branch>

合并分支

分支

git rebase <branch>

变基

撤销

git reset --hard <commit>

回退到指定提交(丢弃修改)

撤销

git revert <commit>

反做某次提交

历史

git log --oneline --graph

图形化查看历史

暂存

git stash

临时保存修改

进阶

git cherry-pick <commit>

挑选提交

进阶

git reflog

查看 HEAD 移动记录

进阶

git bisect

二分查找 Bug

十三、常见问题与最佳实践

最佳实践

  1. 频繁提交、及时推送:将大功能拆分成小提交,每天结束时推送到远程。

  2. 先 fetch 再 merge:使用 git fetch 先查看远程变化,再决定如何合并。

  3. 不要在公共分支上 rebaserebase 会改变提交历史,仅用于本地分支整理。

  4. 及时删除已合并的分支:保持分支列表整洁,避免混乱。

  5. 使用 .gitignore 忽略无关文件:避免将依赖目录、日志、IDE 配置等提交到仓库。

  6. 提交前自查:提交前用 git diff --staged 确认修改内容,用 git status 确认状态。

常见问题排查

问题

解决方案

推送被拒绝(non-fast-forward)

git pull 同步远程更新,解决冲突后再推送

合并冲突

编辑冲突文件,git add 标记解决,git commit 完成合并

误删文件

git checkout -- <file>git restore <file> 恢复

误删提交

使用 git reflog 找回

忘记添加文件就提交了

git add <file>git commit --amend

想撤销本次提交但保留修改

git reset --soft HEAD~1


以上是 Git 的完整使用教程,从基础操作到进阶技巧,再到团队协作最佳实践。Git 的学习曲线虽然稍陡,但掌握后将成为你开发工作中最得力的工具之一。建议在实践中多加练习,遇到问题时善用 git --help 查看帮助文档。

Umami 与 Shynet 轻量级分析工具对比,我为何最终拥抱 Umami 2026-04-18

评论区