
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 无法自动合并。
- Git 会暂停合并,并标记冲突文件。
- 打开文件,查找
<<<<<<< HEAD和>>>>>>>标记。 - 手动修改代码,删除标记符号,保留需要的代码。
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 改为 squash 或 fixup 即可合并提交。
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 几乎所有操作都是可逆的。