目录
- 🍸一、核心概念
-
- [1.1 三个区域](#1.1 三个区域)
- [1.2 三个重要对象](#1.2 三个重要对象)
- [1.3 分支的本质](#1.3 分支的本质)
- 🍸二、基础命令(日常使用)
-
- [2.1 配置](#2.1 配置)
- [2.2 创建和克隆](#2.2 创建和克隆)
- [2.3 基本操作流程](#2.3 基本操作流程)
- [2.4 查看差异](#2.4 查看差异)
- [2.5 查看历史](#2.5 查看历史)
- 🍸三、分支管理
-
- [3.1 基础分支命令](#3.1 基础分支命令)
- [3.2 分支合并](#3.2 分支合并)
- [3.3 基于特定提交创建分支](#3.3 基于特定提交创建分支)
- 🍸四、远程仓库操作(你遇到的核心问题)
-
- [4.1 管理远程仓库](#4.1 管理远程仓库)
- [4.2 推送(你学会的核心)](#4.2 推送(你学会的核心))
- [4.3 拉取和获取](#4.3 拉取和获取)
- [4.4 同步本地分支(你最后用到的)](#4.4 同步本地分支(你最后用到的))
- 🍸五、撤销和恢复(救命的命令)
-
- [5.1 工作区撤销](#5.1 工作区撤销)
- [5.2 暂存区撤销](#5.2 暂存区撤销)
- [5.3 提交撤销](#5.3 提交撤销)
- [5.4 恢复丢失的提交(reflog 救命)](#5.4 恢复丢失的提交(reflog 救命))
- 🍸六、提交历史操作
-
- [6.1 修改最后一次提交](#6.1 修改最后一次提交)
- [6.2 交互式变基(整理历史)](#6.2 交互式变基(整理历史))
- 🍸七、经验总结
- 🍸八、常用别名(提高效率)
- 🍸九、故障排查清单
🍸一、核心概念
1.1 三个区域
工作区 (Working Directory) → 暂存区 (Staging Area/Index) → 本地仓库 (Local Repo) → 远程仓库 (Remote Repo)
↓ ↓ ↓
实际文件 git add 后 git commit 后
1.2 三个重要对象
| 概念 | 说明 | 查看命令 |
|---|---|---|
| HEAD | 当前所在分支的最新提交 | git show HEAD |
| 工作区 | 你正在编辑的文件 | ls / git status |
| 暂存区 | 准备提交的文件 | git diff --cached |
1.3 分支的本质
- 分支只是一个指向某个提交的指针
- 创建分支就是创建新指针
- 切换分支就是移动 HEAD 指针
🍸二、基础命令(日常使用)
2.1 配置
bash
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global core.editor "vim"
git config --list # 查看所有配置
2.2 创建和克隆
bash
git init # 初始化本地仓库
git clone <URL> # 克隆远程仓库
git clone -b <分支名> <URL> # 克隆指定分支
2.3 基本操作流程
bash
git status # 查看状态(最常用)
git add <文件> # 添加到暂存区
git add . # 添加所有修改
git commit -m "消息" # 提交到本地仓库
git commit -am "消息" # 跳过 add,直接提交已跟踪的文件
2.4 查看差异
bash
git diff # 工作区 vs 暂存区
git diff --cached # 暂存区 vs 本地仓库
git diff HEAD # 工作区 vs 本地仓库
git diff branch1..branch2 # 两个分支的差异
2.5 查看历史
bash
git log # 完整历史
git log --oneline # 一行显示
git log --oneline --graph # 图形化显示
git log -5 # 最近5条
git log --grep="关键词" # 搜索提交信息
git log --author="名字" # 按作者搜索
🍸三、分支管理
3.1 基础分支命令
bash
git branch # 查看本地分支(*表示当前)
git branch -a # 查看所有分支(含远程)
git branch -r # 只看远程分支
git branch -vv # 查看本地分支跟踪的远程分支
git branch <分支名> # 创建分支
git checkout <分支名> # 切换分支
git checkout -b <分支名> # 创建并切换
git switch <分支名> # 新语法:切换分支
git switch -c <分支名> # 新语法:创建并切换
git branch -d <分支名> # 删除分支(已合并)
git branch -D <分支名> # 强制删除分支
3.2 分支合并
bash
# 场景:把 feature 分支合并到 main
git checkout main
git merge feature
# 合并后删除 feature(可选)
git branch -d feature
3.3 基于特定提交创建分支
bash
# 基于某个历史提交创建分支
git checkout -b <新分支名> <提交哈希>
# 例如:
git checkout -b version-with-error-print abc1234
🍸四、远程仓库操作(你遇到的核心问题)
4.1 管理远程仓库
bash
git remote -v # 查看远程仓库
git remote add <名称> <URL> # 添加远程仓库
git remote remove <名称> # 删除远程仓库
git remote rename <旧名> <新名> # 重命名
git remote set-url <名称> <新URL> # 修改URL
4.2 推送(你学会的核心)
bash
# 基本推送
git push <远程名> <本地分支名>
# 推送到远程的不同分支名(重要!)
git push <远程名> <本地分支>:<远程分支>
# 例如:推送本地 rust 到远程 main
git push origin rust:main
# 首次推送并建立跟踪
git push -u origin main
# 强制推送(谨慎使用)
git push -f origin main
git push --force origin main
# 删除远程分支
git push origin --delete <分支名>
4.3 拉取和获取
bash
git fetch # 获取远程更新(不合并)
git fetch <远程名> # 获取指定远程
git pull # 获取并合并(fetch + merge)
git pull --rebase # 获取并变基
4.4 同步本地分支(你最后用到的)
bash
# 方法1:拉取合并
git checkout main
git pull origin main
# 方法2:强制重置(本地内容会被覆盖)
git fetch origin
git reset --hard origin/main
🍸五、撤销和恢复(救命的命令)
5.1 工作区撤销
bash
git restore <文件> # 丢弃工作区的修改
git checkout -- <文件> # 旧语法,功能同上
5.2 暂存区撤销
bash
git restore --staged <文件> # 从暂存区移除,保留工作区修改
git reset HEAD <文件> # 旧语法
5.3 提交撤销
bash
# 撤销最近一次提交,保留修改在工作区
git reset --soft HEAD~1
# 撤销最近一次提交,保留修改在暂存区
git reset --mixed HEAD~1
# 撤销最近一次提交,丢弃所有修改(危险)
git reset --hard HEAD~1
5.4 恢复丢失的提交(reflog 救命)
bash
git reflog # 查看所有操作历史
git reflog --oneline -20
# 恢复某个丢失的状态
git checkout <哈希> # 先查看
git branch recover-branch <哈希> # 创建分支保存
git reset --hard <哈希> # 或者直接重置
🍸六、提交历史操作
6.1 修改最后一次提交
bash
git commit --amend # 修改提交信息
git commit --amend --no-edit # 添加漏掉的文件
6.2 交互式变基(整理历史)
bash
git rebase -i HEAD~3 # 整理最近3次提交
# 常用命令:
# pick - 保留
# reword - 修改提交信息
# squash - 合并到上一个提交
# drop - 删除提交
🍸七、经验总结
-
原则1:分支是轻量级的
不要怕创建分支,随便建、随便删
每个功能、每个实验都可以开新分支
-
原则2:本地和远程是独立的
本地分支和远程分支可以有不同的名字
推送时可以指定:git push origin 本地:远程
-
原则3:保护分支不能强制推送
main/master 通常是保护分支
解决方案:推临时分支 → 网页创建 MR → 合并
-
原则4:提交历史是宝贵的
每次提交都是可恢复的
-
原则5:重置前先备份
bash
# 做危险操作前,先创建备份分支
git branch backup-branch
🍸八、常用别名(提高效率)
bash
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"
git config --global alias.last "log -1 --stat"
# 使用
git st # git status
git co main # git checkout main
git lg # 图形化日志
🍸九、故障排查清单
