Git 教程
1. Git 简介与核心概念
Git 是目前世界上最先进的分布式版本控制系统(Distributed Version Control System,DVCS)。与 SVN 等集中式版本控制系统不同,Git 的每个开发者电脑上都拥有一个完整的版本库,这意味着大多数操作都可以在本地完成,无需联网,且速度极快。
Git 的核心设计理念是基于快照(Snapshot)而非差异(Difference)。当你提交更新时,Git 会对当前文件系统的状态制作一个快照并保存这个快照的索引。如果文件没有修改,Git 不会重新存储该文件,而是只保留一个链接指向之前存储的文件。
核心区域
理解 Git 的三个工作区域是掌握 Git 的关键:
- 工作区(Working Directory):你电脑里能看到的目录,用于编辑文件。
- 暂存区(Staging Area / Index):一般存放在
.git目录下的index文件中,保存了下次将要提交的文件列表信息。 - 本地仓库(Local Repository):工作区有一个隐藏目录
.git,这是 Git 的版本库,存贮了所有的版本数据。
此外,还有一个 远程仓库(Remote Repository),用于托管代码和协作。
2. 安装与初始化配置
在开始使用 Git 之前,你需要安装它并进行基础配置。Git 的配置分为三个层级:系统级(System)、用户级(Global)和仓库级(Local)。通常我们只需要配置用户级即可。
身份配置
安装完成后,第一件事就是设置你的用户名和邮件地址。这一点很重要,因为每一个 Git 提交都会使用这些信息,并且它们会写入到你的每一次提交中,不可更改。
# 设置全局用户名
git config --global user.name "Your Name"
# 设置全局邮箱
git config --global user.email "email@example.com"查看配置
你可以使用以下命令查看所有的配置以及它们所在的文件:
git config --list --show-origin初始化仓库
要在当前目录下初始化一个新的 Git 仓库,使用以下命令。这会在当前目录下生成一个 .git 子目录。
git init3. 基础工作流
Git 的日常工作流通常包含修改文件、暂存更改、提交更新这几个步骤。
检查状态
git status 是你最常用的命令之一。它会告诉你哪些文件处于什么状态(已修改、已暂存、未跟踪等)。
git status跟踪与暂存文件
使用 git add 命令将文件添加到暂存区。这是告诉 Git:“我想要在下一次提交中包含这个文件的当前变更”。
# 暂存指定文件
git add filename.txt
# 暂存当前目录下的所有变更(包括新建和修改,不包括删除)
git add .
# 暂存所有变更(包括删除)
git add -A提交更新
当文件暂存后,你可以使用 git commit 将它们提交到本地仓库。提交时必须包含提交信息(Commit Message),清晰的提交信息对于团队协作至关重要。
# 提交并附带简短信息
git commit -m "feat: add user login function"
# 跳过暂存区直接提交所有已跟踪的修改文件(不推荐用于新文件)
git commit -a -m "fix: correct typo in readme"查看提交历史
使用 git log 查看提交历史。
# 查看详细历史
git log
# 查看简略历史,每条记录一行
git log --oneline
# 查看图形化的分支历史
git log --oneline --graph --all4. 分支管理
分支(Branch)是 Git 的杀手级特性。它允许你从开发主线上分离开来,在不影响主线的同时继续工作。Git 的分支模型非常轻量级,创建和切换分支的操作几乎是瞬间完成的。
分支操作
# 创建新分支
git branch feature-login
# 切换到该分支
git checkout feature-login
# 或者使用新版命令
git switch feature-login
# 创建并立即切换到新分支
git checkout -b feature-login合并分支
当你完成了新功能的开发,需要将其合并回主分支(通常是 main 或 master)。
# 首先切换回主分支
git switch main
# 将 feature-login 分支合并到当前分支
git merge feature-login分支管理策略
在实际开发中,我们通常遵循一定的分支管理规范,例如 Git Flow 或 GitHub Flow。
5. 远程协作
远程仓库是指托管在网络或其他位置的 Git 仓库。常见的托管服务有 GitHub、GitLab 和 Gitee。
克隆仓库
如果你想获得一份已经存在的 Git 仓库的拷贝,使用 git clone。
git clone <https://github.com/user/repo.git>远程操作
# 查看远程仓库信息
git remote -v
# 添加远程仓库
git remote add origin <https://github.com/user/repo.git>
# 将本地分支推送到远程
git push -u origin main
# 拉取远程更新并合并到本地
git pull origin main
# 仅拉取远程更新但不合并
git fetch origin6. 高级操作与技巧
撤销操作
在 Git 中,后悔药是有的,但要小心使用。
- 撤销工作区的修改:
git checkout -- <file>或git restore <file>。这会丢弃工作区的修改,恢复到最近一次提交的状态。 - 撤销暂存区的修改:
git reset HEAD <file>或git restore --staged <file>。这会将文件从暂存区移除,但保留工作区的修改。 - 修改最后一次提交:如果你提交后发现漏了文件或写错了提交信息,可以使用
git commit --amend。
变基(Rebase)
变基是另一种合并分支的方法。与 merge 不同,rebase 会将当前分支的提交“搬运”到目标分支的顶端,从而产生一条线性的提交历史。
# 切换到特性分支
git switch feature
# 将 feature 分支变基到 main 分支
git rebase main注意:永远不要在公共分支(如 main)上使用 rebase,这会破坏其他人的提交历史。
储藏(Stash)
当你正在进行一项工作,但需要临时切换分支修复 Bug,而当前工作又不足以提交时,可以使用 git stash。
# 储藏当前工作现场
git stash
# 查看储藏列表
git stash list
# 恢复最近一次储藏并删除记录
git stash pop7. 最佳实践
为了保持代码库的整洁和可维护性,建议遵循以下最佳实践:
- 原子提交(Atomic Commits):每个提交应该只包含一个逻辑上的变更。不要将修复 Bug 和重构代码混在一个提交中。
- 清晰的提交信息:遵循 Conventional Commits 规范,例如
type(scope): subject。feat: 新功能fix: 修复 Bugdocs: 文档变更style: 代码格式(不影响代码运行的变动)refactor: 重构(既不是新增功能,也不是修改 bug 的代码变动)
- 使用 .gitignore:忽略编译生成的文件、临时文件和敏感配置文件。不要将
node_modules、.env等文件提交到仓库。
.gitignore 示例
# 依赖目录
node_modules/
dist/
# 系统文件
.DS_Store
Thumbs.db
# 环境变量
.env