Git 完全使用指南(从入门到精通)


Git 完全使用指南(从入门到精通)

1. 什么是 Git?

Git 是目前世界上最先进的分布式版本控制系统。它由 Linux 之父 Linus Torvalds 在 2005 年创造,用于高效管理从小型到大型项目的代码变更。

  • 分布式:每个人的电脑上都有一个完整的代码仓库,不需要依赖中央服务器即可工作。
  • 快照存储:Git 记录的是文件内容的变化(快照),而不是差异。
  • 几乎所有操作都在本地执行:速度极快,无需网络。

2. 安装与初始配置

2.1 安装

  • Windows:下载 Git for Windows,安装后可使用 Git Bash。
  • macOS:使用 Homebrew 安装(brew install git)或下载官方安装包。
  • Linux (Ubuntu/Debian)sudo apt install git

2.2 初次运行前的设置(必须)

Git 会记录谁进行了提交,因此需要设置用户名和邮箱。

# 设置全局用户名和邮箱(所有仓库默认使用)
git config --global user.name "你的名字"
git config --global user.email "your_email@example.com"

# 设置默认编辑器(例如改为 vim 或 vscode)
git config --global core.editor "code --wait"

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

3. 核心概念图解

在开始命令之前,请理解 Git 的三大工作区域:

  • 工作区 (Working Directory):你电脑里实际能看到的项目文件夹。
  • 暂存区 (Staging Area / Index):临时存放修改的地方,相当于“购物车”。
  • 本地仓库 (Local Repository)git commit 后,代码永久保存的地方。

文件状态流转:

未跟踪 (Untracked) → 已暂存 (Staged) → 已提交 (Committed) → 未修改 (Unmodified) → 已修改 (Modified)

4. 基础操作(日常开发必会)

4.1 创建新仓库

# 方法1:在现有目录中初始化
cd my_project
git init

# 方法2:克隆远程仓库(最常用)
git clone https://github.com/用户名/仓库名.git

4.2 查看状态与差异

# 查看当前文件状态(红色=已修改未暂存,绿色=已暂存)
git status

# 更简洁的状态输出
git status -s

# 查看工作区与暂存区的差异
git diff

# 查看暂存区与最后一次提交(HEAD)的差异
git diff --staged

4.3 添加与提交(核心流程)

# 添加单个文件到暂存区
git add index.html

# 添加当前目录所有变更(新增、修改、删除)到暂存区
git add .

# 添加所有 .js 文件
git add *.js

# 提交暂存区内容到本地仓库
git commit -m "修复了登录页面的样式 bug"

# 跳过暂存区,直接将所有已跟踪的文件提交(相当于 add + commit)
git commit -a -m "直接提交所有修改"

4.4 查看历史记录

# 查看完整提交日志
git log

# 查看简洁的一行日志(好看)
git log --oneline

# 查看图形化分支历史
git log --graph --oneline --decorate --all

# 查看特定文件的修改历史
git log -p 文件名

5. 撤销与回退(后悔药大全)

场景 命令
撤销工作区的修改(未 add) git checkout -- 文件名
撤销暂存区的修改(已 add,未 commit) git reset HEAD 文件名
修改最后一次提交的信息(追加遗漏文件) git commit --amend -m "新信息"
回退到某个历史版本(软回退) git reset --soft 版本号(保留修改)
回退到某个历史版本(硬回退) git reset --hard 版本号(丢弃所有修改)
将文件恢复到指定提交的状态 git restore 文件名 (Git 2.23+)

6. 分支管理(团队协作的核心)

分支允许你隔离开发,不影响主分支(如 main)的稳定性。

6.1 基础操作

# 列出所有本地分支(* 号代表当前所在分支)
git branch

# 创建新分支(但不切换)
git branch feature/new-login

# 切换到指定分支
git checkout feature/new-login

# 创建并立即切换(推荐)
git checkout -b feature/new-login

# 新式命令(Git 2.23+)
git switch -c feature/new-login  # 创建并切换
git switch main                  # 切换回主分支

6.2 合并与删除

# 1. 先切回主分支
git checkout main

# 2. 将 feature 分支合并进来
git merge feature/new-login

# 3. 合并完后删除该分支(-d 只能删已合并的,-D 强制删)
git branch -d feature/new-login

6.3 处理合并冲突 (Conflict)

当两个分支修改了同一文件的同一行时,Git 无法自动合并。

  1. Git 会暂停合并,并标记冲突文件。
  2. 打开文件,查找 <<<<<<< HEAD>>>>>>> 标记。
  3. 手动修改代码,删除标记符号,保留需要的代码。
git add 解决冲突的文件
git commit -m "解决了合并冲突"

7. 远程仓库协作(GitHub/GitLab)

7.1 管理远程源

# 查看当前配置的远程仓库
git remote -v

# 添加远程仓库(通常叫 origin)
git remote add origin https://github.com/用户名/仓库名.git

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

7.2 推送 (Push) 与拉取 (Pull)

# 将本地 main 分支推送到远程 origin(首次加 -u 建立追踪)
git push -u origin main

# 之后的推送
git push

# 从远程拉取更新并合并(相当于 fetch + merge)
git pull origin main

# 只拉取更新,但不合并(查看远程改动)
git fetch origin

7.3 标签 (Tags) - 常用于版本发布

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

# 创建附注标签(推荐,包含作者信息)
git tag -a v1.0.0 -m "正式版发布"

# 推送标签到远程
git push origin --tags

8. 高级技巧(提升效率)

8.1 储藏 (Stash) - 紧急切换分支

当你正在写代码,突然需要切换到别的分支修 Bug,但又不想提交半成品代码:

# 保存当前工作进度
git stash push -m "登录功能开发中"

# 查看储藏列表
git stash list

# 恢复最近一次储藏(同时删除储藏记录)
git stash pop

# 恢复但不删除储藏记录
git stash apply stash@{0}

8.2 变基 (Rebase) - 保持提交历史线性

Rebase 可以将一个分支的提交“嫁接”到另一个分支的顶端,使历史更整洁。

# 在 feature 分支上执行,将 feature 的起点移到 main 的最新提交上
git checkout feature
git rebase main

⚠️ 警告:不要在公共(远程)分支上使用 rebase,仅用于本地尚未推送的分支。

8.3 交互式变基 (Rebase -i) - 合并/修改历史提交

# 合并最近 3 次提交(squash)
git rebase -i HEAD~3

在弹出的编辑器中,将 pick 改为 squashfixup 即可合并提交。

8.4 日志美化 (Alias)

给常用命令设置别名,提升效率:

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

现在输入 git lg 就能看到华丽的提交树了。

9. .gitignore 文件(忽略不需要的文件)

在项目根目录创建 .gitignore 文件,让 Git 忽略系统文件、编译产物、依赖包等。

常见忽略内容:

# 依赖文件夹
node_modules/
vendor/

# 编译产物
*.class
*.exe
*.log

# 系统文件
.DS_Store
Thumbs.db

# 环境变量文件
.env
.env.local

# IDE配置(建议全局忽略)
.idea/
.vscode/

10. 最佳实践与注意事项

  • 提交要原子化:每次提交只做一件事,提交信息要清晰(如 fix: 修复登录超时)。
  • 提交信息规范:推荐使用约定式提交(Conventional Commits):
类型 说明
feat 新功能
fix 修复 Bug
docs 文档修改
style 代码格式(不影响逻辑)
refactor 重构
test 增加测试
  • 定期推送:每天下班前务必 git push,防止本地硬盘损坏丢失代码。
  • Pull 之前先 Commit:拉取远程代码前,确保本地没有未提交的修改会引发冲突,如有冲突,先解决再 Push。
  • 不要在公共分支强推:永远不要使用 git push --force,这会覆盖他人的提交。如需强制推送,请使用 --force-with-lease

11. 常见问题速查表

问题场景 解决方案
提交信息写错了,还没 Push git commit --amend -m "新信息"
忘记添加某个文件,想补到上次提交 git add 忘记的文件 + git commit --amend
想撤回刚才的 Push git reset --hard HEAD~1 + git push --force(慎用)
误删了文件,想恢复 git checkout -- 文件名git restore 文件名
合并时搞乱了,想放弃合并 git merge --abort

以上内容覆盖了 Git 日常开发和协作中 95% 以上的场景。建议将常用命令反复练习,遇到复杂情况时,不要惊慌,记住 Git 几乎所有操作都是可逆的。