以下是 Git 的常用命令和基本用法,按使用场景分类,适合日常开发。
一、仓库初始化与克隆
| 命令 | 说明 |
|---|---|
git init | 在当前目录初始化一个新的 Git 仓库 |
git clone <url> | 克隆远程仓库到本地 |
git clone --depth 1 <url> | 浅克隆,只下载最新一次提交(节省时间) |
二、查看状态与历史
| 命令 | 说明 |
|---|---|
git status | 查看工作区和暂存区的状态(最常用) |
git log | 查看提交历史 |
git log --oneline | 简洁版提交历史 |
git log --graph --oneline --all | 图形化显示所有分支历史 |
git diff | 查看工作区与暂存区的差异 |
git diff --staged | 查看暂存区与上次提交的差异 |
git show <commit-hash> | 查看某次提交的详细内容 |
三、日常修改与提交
| 命令 | 说明 |
|---|---|
git add <file> | 将文件添加到暂存区 |
git add . | 添加所有修改(包括新增、修改、删除) |
git add -A | 同上,更显式 |
git commit -m "message" | 提交暂存区内容 |
git commit -am "message" | 跳过 add,直接提交已跟踪文件的修改 |
git commit --amend | 修改上一次提交(补充文件或修改说明) |
git restore <file> | 丢弃工作区的修改(恢复成暂存区或 HEAD 版本) |
git rm <file> | 删除文件并记录到暂存区 |
四、分支操作
| 命令 | 说明 |
|---|---|
git branch | 查看本地分支(当前分支带 *) |
git branch -r | 查看远程分支 |
git branch -a | 查看所有分支(本地+远程) |
git branch <name> | 创建新分支 |
git branch -d <name> | 删除分支 |
git checkout <branch> | 切换分支 |
git switch <branch> | 更安全的切换分支(Git 2.23+) |
git checkout -b <name> | 创建并切换到新分支 |
git merge <branch> | 将指定分支合并到当前分支 |
git rebase <branch> | 变基操作,使提交历史更线性 |
五、远程仓库操作
| 命令 | 说明 |
|---|---|
git remote -v | 查看远程仓库地址 |
git remote add origin <url> | 添加远程仓库 |
git push origin <branch> | 推送本地分支到远程 |
git push -u origin <branch> | 推送并建立上游关联(之后直接git push) |
git push --force | 强制推送(⚠️ 谨慎使用) |
git pull | 拉取远程并合并(= fetch + merge) |
git fetch | 只拉取远程更新,不自动合并 |
git clone后的默认远程名是origin |
六、撤销与恢复
| 命令 | 说明 |
|---|---|
git reset HEAD <file> | 将文件从暂存区撤出(保留工作区修改) |
git reset --soft HEAD~1 | 撤销最近一次提交,但保留修改在暂存区 |
git reset --mixed HEAD~1 | 撤销提交并保留修改在工作区(默认) |
git reset --hard HEAD~1 | ⚠️ 彻底丢弃最近一次提交和所有修改(危险) |
git revert <commit> | 用一次新提交反向撤销某次历史提交(安全) |
git stash | 临时保存当前工作区的修改 |
git stash pop | 恢复最近一次 stash 并删除记录 |
git stash list | 查看所有 stash |
七、标签(版本发布)
| 命令 | 说明 |
|---|---|
git tag | 查看所有标签 |
git tag <name> | 创建轻量标签 |
git tag -a v1.0 -m "message" | 创建带注释的标签 |
git push origin <tag> | 推送单个标签 |
git push --tags | 推送所有标签 |
八、典型工作流示例
场景1:开始一个新功能
bash
git checkout main git pull # 更新主分支 git checkout -b feature-xxx # 创建并切换到功能分支 # ... 修改代码 ... git add . git commit -m "feat: xxx" git push -u origin feature-xxx
场景2:同步远程最新代码
bash
git pull origin main # 拉取并合并 # 或者更安全的做法: git fetch origin git diff origin/main # 先看差异 git merge origin/main # 确认后再合并
场景3:撤销不想提交的修改
bash
git checkout -- <file> # 丢弃工作区修改(旧语法) git restore <file> # 新语法(Git 2.23+)
场景4:合并别人修改时解决冲突
bash
git pull origin main # 出现冲突 → 手动编辑冲突文件 → 删除 <<<<< ===== >>>> 标记 git add . git commit -m "merge conflict resolved"
九、常用查看历史命令
bash
git log --oneline --graph --all --decorate # 最推荐的可视化日志 git reflog # 查看所有 HEAD 移动记录(可用于恢复丢失的提交) git status -sb # 简洁状态 + 分支信息
十、别名设置(提升效率)
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 st、git co、git lg 等
记住三个核心区域
text
工作区 (Working Directory) ↓ git add 暂存区 (Staging Area) ↓ git commit 本地仓库 (Local Repository) ↓ git push 远程仓库 (Remote Repository)
最常用的三个命令:git status、git add、git commit— 掌握它们就覆盖了 80% 的日常场景。
.gitignore用法
| 关键点 | 说明 |
|---|---|
.gitignore的生效时机 | 只在文件从未被追踪时生效 |
| 已被追踪的文件 | .gitignore对它无效 |
| 删除已被追踪的文件 | Git 会记录删除操作 |
| push 后的结果 | 远程该文件也会被删除 |
文件一旦被 Git 追踪过(commit 过),
.gitignore就管不了它了。本地删除并提交后,push 到远程会同步删除远程的该文件。
如果你想让远程文件保留但本地删除,需要执行git rm --cached(从 Git 中移除追踪)而不是直接rm。