🚀 Git 实用命令速查

一页速查,覆盖日常开发 90% 的 Git 操作。 从拉取、提交、回滚到分支合并,每个命令都附带使用场景说明。


⚡ 一分钟上手

1
2
3
4
5
6
7
8
# 克隆仓库
git clone <url>

# 日常开发四步走
git pull origin main # 1. 拉最新代码
git add . # 2. 暂存所有修改
git commit -m "feat: 做了什么" # 3. 提交
git push origin main # 4. 推送

💡 约定:下文 <远程名称> 通常为 origin<分支名> 通常为 main / master。本项目的远程名为 blogger_source


📋 目录

章节 内容
⬇️ 拉取代码 pull / fetch / remote
⬆️ 提交更新 addcommitpush
🗑️ 删除文件 rm / rm --cached
↩️ 恢复修改 restore / reset / reflog
📜 修改日志 log / diff / show
🌿 分支管理 branch / switch / checkout
🔀 合并代码 merge / rebase / 冲突解决

⬇️ 拉取代码

1
2
3
git pull <远程名称> <分支名>    # 拉取并自动合并(最常用)
git fetch <远程名称> <分支名> # 仅下载,不合并
git remote -v # 查看所有远程仓库

💡 每天开始工作前先 git pull,避免后续合并冲突。


⬆️ 提交更新

标准流程

1
2
3
4
git status                     # 1. 看看改了什么
git add . # 2. 全部暂存(或指定文件 git add <file>)
git commit -m "提交说明" # 3. 提交到本地
git push <远程名称> <分支名> # 4. 推送到远程

快捷操作

1
2
3
git commit -am "提交说明"                    # 跳过 git add,一步提交已跟踪文件
git commit --amend -m "新的提交说明" # 修改最近一次提交信息
git log --oneline -10 # 最近 10 条提交记录

⚠️ commit --amend 会改写历史,不要对已推送的提交使用,除非你确定只有自己在用这个分支。


🗑️ 删除文件

1
2
3
4
5
6
7
8
# 彻底删除(文件 + Git 追踪)
git rm <文件名>
git rm -r <文件夹>
git commit -m "删除 xxx"

# 仅取消追踪,保留本地文件
git rm --cached <文件名>
echo "<文件名>" >> .gitignore # 加入忽略列表,防止再次被追踪

💡 典型场景:误提交了 node_modules/.DS_Store、配置文件等。先用 rm --cached 取消追踪,再写入 .gitignore


↩️ 恢复修改

三阶段回退指南

所处阶段 命令 效果
工作区(未 add) git restore <file> 丢弃工作区修改
暂存区(已 add) git restore --staged <file> 从暂存区移除,保留修改
本地仓库(已 commit) git reset --soft HEAD~1 撤销提交,保留修改
本地仓库(已 commit) git reset --hard HEAD~1 ⚠️ 撤销提交 + 丢弃修改
1
2
3
4
5
6
7
8
9
10
11
# ——— 工作区 ———
git restore <文件名> # 撤销指定文件的修改
git restore . # 撤销所有修改

# ——— 暂存区 ———
git restore --staged <文件名> # 取消暂存,修改回到工作区
git restore --staged . # 取消全部暂存

# ——— 本地提交 ———
git reset --soft HEAD~1 # 推荐:撤销提交,修改回到暂存区
git reset --hard <commit-id> # 危险:回退到指定 commit,丢弃之后的所有修改

找回”丢失”的提交

1
2
git reflog                     # 查看 HEAD 移动记录(救命稻草)
git reset --hard <commit-id> # 回到 reflog 中找到的那条记录

⚠️ git reset --hard 不可逆,执行前确认工作区没有需要保留的修改。--soft 更安全。


📜 修改日志

查看历史

1
2
3
4
5
6
git log                        # 完整提交历史
git log --oneline # 一行一条,简洁
git log --graph --oneline --all # 图形化展示分支关系
git log --author="用户名" # 按作者过滤
git log -- <文件名> # 某文件的修改历史
git log --since="2024-01-01" --until="2024-12-31" # 按时间范围过滤

查看差异

1
2
3
4
git show <commit-id>           # 某次提交改了啥
git diff # 工作区 vs 暂存区
git diff --cached # 暂存区 vs 最新提交
git diff <id1> <id2> # 两个 commit 之间的差异

追溯责任

1
git blame <文件名>              # 每一行是谁、什么时候改的

🌿 分支管理

查看 & 创建 & 切换

1
2
3
4
5
6
7
8
9
10
11
12
# 查看
git branch # 本地分支列表
git branch -a # 含远程分支
git branch --show-current # 显示当前分支名

# 创建 & 切换(推荐 Git 2.23+ 的 switch)
git switch -c <分支名> # 创建并切换到新分支
git switch <分支名> # 切换到已有分支

# 兼容旧版
git checkout -b <分支名> # 创建并切换
git checkout <分支名> # 切换分支

删除 & 重命名

1
2
3
4
git branch -d <分支名>                              # 安全删除(已合并的分支)
git branch -D <分支名> # 强制删除(未合并也删)
git push <远程名称> --delete <分支名> # 删除远程分支
git branch -m <新名称> # 重命名当前分支

💡 合并完的功能分支及时删除,保持仓库整洁。用 git branch -d 安全删除不会丢代码。


🔀 合并代码

标准合并(merge)

1
2
3
git switch main                # 1. 切到目标分支
git merge <分支名> # 2. 合并
git push <远程名称> main # 3. 推送

变基合并(rebase)

1
2
3
4
5
6
git switch feature             # 切到你的功能分支
git rebase main # 把你的提交"搬到" main 最新提交之后
# ... 如有冲突,解决后:
git add .
git rebase --continue
git push <远程名称> feature --force # rebase 后需要强推

⚠️ rebase vs merge 怎么选?

  • merge:保留完整历史,适合公共分支
  • rebase:线性历史更干净,适合个人分支。不要 rebase 已推送的公共分支。

解决冲突

1
2
3
4
git merge <分支名>
# CONFLICT → 手动编辑冲突文件,删掉 <<<< ==== >>>> 标记
git add <冲突文件> # 标记为已解决
git commit -m "解决合并冲突"

冲突标记解读:

  • <<<<<<< HEAD —— 当前分支的代码
  • ======= —— 分隔线
  • >>>>>>> 分支名 —— 要合入的分支代码

撤销合并

1
2
git reset --hard HEAD~1        # 撤销最近一次合并
git push <远程名称> main --force # 如果已推送……

⚠️ 撤销已推送的合并请通知团队成员,他们需要 git pull --force 同步。


💡 实用技巧

临时保存进度(stash)

1
2
3
4
git stash save "描述"           # 暂存当前修改,工作区变干净
git stash list # 查看所有暂存
git stash pop # 恢复最近一次暂存(同时删除记录)
git stash apply stash@{0} # 恢复指定暂存(保留记录)

💡 场景:代码写到一半需要切分支处理紧急 bug,用 stash 暂存,回来再 pop

标签管理

1
2
3
4
5
git tag v1.0.0                              # 打轻量标签
git tag -a v1.0.0 -m "版本说明" # 打附注标签
git push <远程名称> v1.0.0 # 推送指定标签
git push <远程名称> --tags # 推送全部标签
git tag -d v1.0.0 # 删除本地标签

.gitignore 模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 依赖
node_modules/
vendor/

# 系统文件
.DS_Store
Thumbs.db

# 日志
*.log

# 编译产物
dist/
build/

# IDE
.vscode/
.idea/

⚠️ 原则 & 注意事项

  1. 推送前先拉取pullpush 是一条铁律,不要跳过拉取直接推送
  2. 小步提交 — 每个 commit 只做一件事,出问题回滚不牵连其他
  3. 写清楚提交信息 — 说明”做了什么”和”为什么”,不要写”修了个 bug”
  4. --force 是双刃剑 — 用前确认影响范围,用后通知队友
  5. 遇事不慌看 reflog — 只要 commit 过,git reflog 几乎都能救回来

本项目配置:远程名 blogger_source,SSH 方式连接。
日常命令git pull blogger_source main · git push blogger_source main