git 基础与常用命令
2026-04-30
什么是 git?
git 是一个版本工具,核心是 .git 目录中的文件。git init 以后,目录下就会自动创建 .git 以及 .gitignore。.gitignore 中输入文件或者目录,git 仓库将不追踪这些文件的改动,.gitignore 支持通配符。
git 的直觉
一个 git 仓库,里面所有的提交构成一张 DAG(有向无环图),一个 commit 就是一个节点,每个 commit 都会指向它的上一个 commit。
分支可以理解为指针(实际称呼为 ref),指向某一个节点(commit)。HEAD 是当前目录下的指针,当前目录呈现 git 仓库哪个版本(commit 节点)依靠 HEAD 指针,而 HEAD 指针要指向某个分支。
tips:不过 HEAD 也可以走"分离指针头"状态,直接指向具体的某个 commit,绕过分支。一个 commit 可能会指向多个父节点(考虑合并提交的情况)。
常见 git 仓库图结构(不考虑边的出入方向):
fix/login
↓
─── X ──┐
/ ↓
main: A ─ B ─ C ─────── M1 ── D ── E ────────── M2 ── F ← main
\ /
P ── Q ── R ──── S ── T ─────┘
\ ↑
U ── V feature/api
↑
feature/uigit 常用命令
### 起步
git init
git clone <url>
### 三件套(每天用 N 次)
git status # 我现在啥情况?
git add <file> / git add -A # 把改动暂存
git commit -m "msg" # 提交
### 看历史
git log --oneline --graph --all
git diff / git diff --staged
### 分支操作(现代写法用 switch, 也可以用 checkout)
git branch # 列分支
git switch <branch> # 切分支
git switch -c <new-branch> # 新建并切过去 (c = create)
git branch -d <branch> # 删
### 同步
git fetch # 拉远端最新 ref, 不动本地
git pull --rebase # 拉 + 把本地提交 rebase 到远端之上 (推荐)
git push / git push -u origin <br> # 首次推送加 -utips:
- 对新起的项目,
git init让 git 接管目录下文件 git add -A将整个项目工作区中的修改添加到暂存区;git add .只提交当前目录下的修改git diff看工作区修改但是还没提交到暂存区的代码;git diff --staged看暂存区的改动(已经git add但是还没有git commit)git checkout也可以切分支,根据后续的参数不同,可以实现git switch或git restore的功能。现在最佳实践是分两个命令,意图更清晰git pull = git fetch + git merge