Git 操作指南
一、基础概念
1. Git 的四个区域
工作区 (Working Directory) # 你正在编辑的文件
↓ git add
暂存区 (Staging Area) # 准备提交的修改
↓ git commit
本地仓库 (Local Repository) # .git 目录,你的提交历史
↓ git push
远程仓库 (Remote Repository) # GitHub、GitLab 等
2. 三种状态
- Modified:文件被修改,但还没暂存
- Staged:文件已暂存,等待提交
- Committed:修改已提交到本地仓库
二、基础操作
1. 初始化与克隆
bash
# 初始化本地仓库
git init
# 克隆远程仓库
git clone https://github.com/user/repo.git
# 克隆指定分支
git clone -b dev https://github.com/user/repo.git
2. 添加与提交
bash
# 查看当前状态
git status
# 查看具体修改
git diff
# 添加单个文件到暂存区
git add index.html
# 添加所有修改
git add .
# 提交到本地仓库
git commit -m "提交说明"
# 添加并提交(一次性完成)
git commit -am "提交说明" # 仅适用于已跟踪的文件
3. 查看提交历史
bash
# 查看详细提交历史
git log
# 简略版(一行一个提交)
git log --oneline
# 查看最近5次提交
git log -5 --oneline
# 查看所有分支的提交
git log --all --oneline
# 可视化查看分支图
git log --graph --oneline --all
三、分支操作
1. 创建与切换
bash
# 查看本地分支
git branch
# 查看所有分支(包括远程)
git branch -a
# 创建新分支
git branch feature-login
# 切换分支
git checkout feature-login
# 创建并切换(简写)
git checkout -b feature-login
# 切换到上一个分支
git checkout -
2. 删除与重命名
bash
# 删除已合并的分支
git branch -d feature-login
# 强制删除分支
git branch -D feature-login
# 重命名当前分支
git branch -m new-name
3. 合并分支
bash
# 切换到主分支
git checkout main
# 合并 feature-login 分支
git merge feature-login
# 取消 merge(如果有冲突想重来)
git merge --abort
四、远程操作
1. 添加与查看远程仓库
bash
# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 重命名远程
git remote rename origin upstream
2. 拉取与推送
bash
# 拉取远程代码
git fetch origin
# 拉取并合并
git pull origin main
# 拉取并变基(推荐,保持直线历史)
git pull --rebase origin main
# 推送本地分支到远程
git push origin feature-login
# 推送并设置上游分支
git push -u origin feature-login
# 删除远程分支
git push origin --delete old-branch
3. 本地与远程差异
bash
# 先获取远程最新信息
git fetch origin
# 查看本地没有、远程有的提交
git log HEAD..origin/main
# 查看远程有、本地没有的提交
git log origin/main..HEAD
# 查看文件差异
git diff HEAD origin/main
五、回滚操作
1. 工作区回滚
bash
# 撤销单个文件的修改
git checkout -- index.html
# 撤销所有文件的修改
git checkout -- .
# 简写
git restore index.html
git restore .
2. 暂存区回滚
bash
# 撤销暂存(把暂存区的文件放回工作区)
git reset HEAD index.html
# 简写
git restore --staged index.html
3. 提交回滚
bash
# 回滚到上一个提交(保留修改在工作区)
git reset --soft HEAD~1
# 回滚到上一个提交(保留修改在暂存区)
git reset --mixed HEAD~1 # 默认是这个
# 回滚到上一个提交(丢弃所有修改)⚠️危险
git reset --hard HEAD~1
# 回滚到指定提交
git reset --hard abc1234
# 撤销最后一次提交,创建一个新的提交来还原
git revert HEAD
4. 远程回滚
bash
# 强制推送(覆盖远程)⚠️
git push --force origin main
# 安全模式:只允许快进推送
git push --force-with-lease origin main
六、Rebase 变基
1. 什么是 Rebase
把当前分支的提交"移动"到另一个分支的后面,形成直线历史。
2. 基本用法
bash
# 场景:你的分支从 main 分支分出来,现在 main 有新提交了
# 之前:
# main: A -- B -- C
# \
# 你的分支: D -- E
# 你执行:
git checkout feature-login
git rebase main
# 之后:
# main: A -- B -- C
# \
# 你的分支: D' -- E'
3. 交互式 Rebase(整理提交)
bash
# 修改最近3个提交
git rebase -i HEAD~3
# 会打开编辑器,可以:
# - pick: 保留这个提交
# - squash: 合并到上一个提交
# - reword: 修改提交说明
# - drop: 删除这个提交
4. Rebase vs Merge
| 场景 | 推荐 |
|---|---|
| 拉取远程最新代码 | git pull --rebase |
| 合并别人的功能分支 | git merge |
| 整理本地提交记录 | git rebase -i |
| 已推送的分支 | 不要 rebase |
5. 取消 Rebase
bash
# 取消正在进行的 rebase
git rebase --abort
七、暂存操作(Stash)
1. 暂存修改
bash
# 暂存当前所有修改
git stash
# 暂存并添加说明
git stash save "临时保存:修复bug"
# 暂存未跟踪的文件
git stash -u
# 暂存所有文件(包括忽略的)
git stash -a
2. 恢复暂存
bash
# 恢复最新的暂存(不删除)
git stash apply
# 恢复最新的暂存(删除)
git stash pop
# 恢复指定的暂存
git stash apply stash@{2}
# 查看暂存列表
git stash list
3. 删除暂存
bash
# 删除单个暂存
git stash drop stash@{0}
# 清空所有暂存
git stash clear
八、标签操作
bash
# 创建轻量标签
git tag v1.0.0
# 创建附注标签(推荐)
git tag -a v1.0.0 -m "版本1.0.0"
# 查看所有标签
git tag
# 查看标签详情
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. 冲突处理
bash
# 冲突时,先查看冲突文件
git status
# 手动解决冲突后,添加并提交
git add index.html
git commit -m "解决冲突"
2. 修改最后一次提交
bash
# 漏提交了文件或提交说明写错了
git add forgotten-file.html
git commit --amend
# 会进入编辑器,可以修改提交说明
3. 查看谁修改了某一行
bash
git blame index.html
4. 忽略文件
在 .gitignore 文件中添加:
node_modules/
dist/
*.log
.env
十、实战场景
场景1:开发一半,要临时切换分支
bash
# 暂存当前修改
git stash
# 切换分支处理紧急bug
git checkout bugfix-branch
# ... 修复 bug ...
git commit -m "修复紧急bug"
git push
# 切回来继续开发
git checkout feature-branch
git stash pop
场景2:代码写乱了,想重头来
bash
# 撤销所有修改,回到最近一次提交
git reset --hard HEAD
# 如果已经提交,想完全清除
git reset --hard HEAD~1
场景3:误删了分支,想恢复
bash
# 找到删除前的 commit
git reflog
# 基于那个 commit 创建新分支
git checkout -b recovered-branch abc1234
场景4:推送被拒绝(远程比本地新)
bash
# 方案1:rebase 方式(推荐)
git fetch origin
git pull --rebase origin main
# 方案2:merge 方式
git pull origin main
# 方案3:强制推送(慎用)
git push --force origin main
场景5:撤销已经 push 的提交
bash
# 创建一个新提交来撤销
git revert abc1234
# 推送
git push origin main
十一、Git 配置
bash
# 查看所有配置
git config --list
# 设置用户名
git config --global user.name "Your Name"
# 设置邮箱
git config --global user.email "your@email.com"
# 设置别名(简化命令)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.lg "log --oneline --graph --all"
# 设置默认分支名
git config --global init.defaultBranch main