Documentation Index
Fetch the complete documentation index at: https://adonis-til.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Git 是开发者每天都在用的工具,但命令多、参数杂,记不住很正常。
这篇速查按使用场景分类,每个命令附带 Oh My Zsh 的 git 插件别名(括号内),让你少敲很多字。
前提:你的 .zshrc 里需要启用 git 插件:plugins=(... git)
基础概念:三个区域
Git 的文件在三个区域之间流转,理解了这个,后面所有命令都好懂:
工作区 (Working) → 暂存区 (Staging) → 仓库 (Repository)
↑ 你改的文件 ↑ git add ↑ git commit
初始化与配置
git init # 初始化一个新仓库
git clone <url> # 克隆远程仓库(别名:gcl)
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --list # 查看所有配置(别名:gcf)
SSH 密钥配置
用 HTTPS 每次推送都要输密码,配置 SSH 密钥后就能免密操作。
1. 检查是否已有密钥
ls ~/.ssh
# 如果看到 xxx 和 xxx.pub 成对出现,说明已有密钥,可跳过生成步骤
2. 生成密钥
推荐用 Ed25519:比传统 RSA 更安全、更快、密钥更短。GitHub 已屏蔽旧版 RSA/SHA-1 签名。
ssh-keygen -t ed25519 -C "你的邮箱"
系统会提示:
Enter file in which to save the key (/Users/你/.ssh/id_ed25519):
- 建议自定义文件名(如
~/.ssh/github_ed25519),避免多个服务的密钥互相覆盖
- 密码(passphrase)可以直接回车留空,设了的话每次 push 都要输
3. 添加到 ssh-agent
eval "$(ssh-agent -s)" # 启动 agent
ssh-add ~/.ssh/github_ed25519 # 添加私钥
macOS 用户可以在 ~/.ssh/config 中配置自动加载,省得每次手动添加:
Host github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/github_ed25519
4. 添加公钥到 GitHub
cat ~/.ssh/github_ed25519.pub # 复制输出的内容
# macOS 可以直接:
cat ~/.ssh/github_ed25519.pub | pbcopy
然后去 GitHub → Settings → SSH and GPG keys → New SSH key,粘贴即可。
5. 验证连接
ssh -T git@github.com
# 成功会显示:Hi xxx! You've been authenticated...
多账号配置
如果你有多个 GitHub 账号(比如个人 + 公司),需要在 ~/.ssh/config 中用 Host 别名区分:
# 个人账号
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/personal_ed25519
IdentitiesOnly yes
# 公司账号
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/work_ed25519
IdentitiesOnly yes
克隆公司仓库时把 github.com 换成别名:
git clone git@github-work:company/repo.git
日常提交三连
最核心的操作流程:改代码 → 暂存 → 提交。
git status # 查看当前状态(别名:gst)
git status --short # 简洁版(别名:gss)
暂存文件
| 操作 | 命令 | 别名 |
|---|
| 暂存指定文件 | git add <file> | ga |
| 暂存所有修改 | git add --all | gaa |
| 暂存并查看详情 | git add --verbose | gav |
| 交互式选择暂存 | git add --patch | gapa |
| 操作 | 命令 | 别名 |
|---|
| 提交(打开编辑器写信息) | git commit --verbose | gc |
| 提交并附带信息 | git commit --message "msg" | gcmsg |
| 暂存所有并提交 | git commit --all --message "msg" | gcam |
| 修改上次提交 | git commit --amend | gc! |
| 修改上次提交(不改信息) | git commit --no-edit --amend | gcn! |
查看变更
| 操作 | 命令 | 别名 |
|---|
| 查看未暂存的修改 | git diff | gd |
| 查看已暂存的修改 | git diff --staged | gds |
| 按单词对比差异 | git diff --word-diff | gdw |
| 查看与上游的差异 | git diff @{upstream} | gdup |
分支操作
分支是 Git 的核心杀手锏,随便开、随便切、合完就删。
查看与创建
| 操作 | 命令 | 别名 |
|---|
| 查看本地分支 | git branch | gb |
| 查看所有分支(含远程) | git branch --all | gba |
| 查看远程分支 | git branch --remote | gbr |
| 创建并切换分支 | git checkout -b <name> | gcb |
| 切换分支(推荐新语法) | git switch <name> | gsw |
| 创建并切换(新语法) | git switch -c <name> | gswc |
| 切到主分支 | git checkout $(git_main_branch) | gcm |
删除与重命名
| 操作 | 命令 | 别名 |
|---|
| 删除分支(已合并) | git branch --delete | gbd |
| 强制删除分支 | git branch --delete --force | gbD |
| 重命名分支 | git branch --move | gbm |
远程操作
| 操作 | 命令 | 别名 |
|---|
| 拉取(merge 方式) | git pull | gl |
| 拉取(rebase 方式) | git pull --rebase | gpr |
| 拉取并自动 stash | git pull --rebase --autostash | gpra |
| 从 origin 拉取主分支 | git pull --rebase origin main | gprom |
| 操作 | 命令 | 别名 |
|---|
| 推送 | git push | gp |
| 首次推送并设置上游 | git push --set-upstream origin <branch> | gpsup |
| 安全强推 | git push --force-with-lease | gpf |
| 强制推送(慎用) | git push --force | gpf! |
| 删除远程分支 | git push origin --delete <branch> | gpod |
| 操作 | 命令 | 别名 |
|---|
| 获取远程更新 | git fetch | gf |
| 获取所有远程 + 清理 | git fetch --all --tags --prune | gfa |
| 获取 origin | git fetch origin | gfo |
合并与变基
| 操作 | 命令 | 别名 |
|---|
| 合并分支 | git merge | gm |
| 仅快进合并 | git merge --ff-only | gmff |
| 合并远程主分支 | git merge origin/main | gmom |
| 中止合并 | git merge --abort | gma |
| 变基到主分支 | git rebase $(git_main_branch) | grbm |
| 交互式变基 | git rebase --interactive | grbi |
| 中止变基 | git rebase --abort | grba |
| 继续变基 | git rebase --continue | grbc |
暂存工作(Stash)
手头写了一半要切分支?stash 帮你把改动暂时藏起来。
| 操作 | 命令 | 别名 |
|---|
| 暂存(含未跟踪文件) | git stash --include-untracked | gstu |
| 暂存所有 | git stash --all | gstall |
| 恢复最近一次暂存 | git stash pop | gstp |
| 恢复但不删除 | git stash apply | gstaa |
| 查看暂存列表 | git stash list | gstl |
| 查看暂存内容 | git stash show --patch | gsts |
| 删除最近一次暂存 | git stash drop | gstd |
| 清空所有暂存 | git stash clear | gstc |
撤销与回退
这是最容易搞混的部分。记住一个原则:先确认影响范围,再操作。
撤销暂存
git restore --staged <file> # 把文件从暂存区移回工作区(别名:grst)
git reset -- <file> # 同上,旧语法(别名:gru)
撤销修改
git restore <file> # 丢弃工作区修改,恢复到暂存区版本(别名:grs)
git checkout -- <file> # 同上,旧语法
回退提交
| 操作 | 命令 | 别名 |
|---|
| 软回退(保留修改在暂存区) | git reset --soft HEAD~1 | grhs |
| 混合回退(保留修改在工作区) | git reset HEAD~1 | grh |
| 硬回退(丢弃所有修改) | git reset --hard HEAD~1 | grhh |
| 创建一个反向提交 | git revert <commit> | grev |
安全提示:reset --hard 会丢失未提交的修改,用前三思。优先用 revert 来安全地撤销已推送的提交。
查看历史
| 操作 | 命令 | 别名 |
|---|
| 单行日志 | git log --oneline --decorate | glo |
| 图形化日志 | git log --oneline --decorate --graph | glog |
| 图形化 + 所有分支 | git log --oneline --decorate --graph --all | gloga |
| 带文件变更统计 | git log --stat | glg |
| 漂亮格式 + 时间 | git log --graph --pretty=... | glol |
| 查看某次提交 | git show <commit> | gsh |
| 查看谁写的(blame) | git blame -w <file> | gbl |
| 操作 | 命令 | 别名 |
|---|
| 创建带注释的标签 | git tag --annotate | gta |
| 列出标签(按版本排序) | git tag | sort -V | gtv |
| 查看最新标签 | git describe --tags ... | gdct |
WIP 快捷流程
Oh My Zsh 提供了一套”半成品保存”流程,切分支前用 gwip,回来用 gunwip:
gwip # 暂存所有 + 创建一个 --wip-- 提交(不触发 hooks)
gunwip # 撤销最近一个 --wip-- 提交,恢复到修改状态
我的高频操作 Top 10
| # | 场景 | 快速输入 |
|---|
| 1 | 查看状态 | gst |
| 2 | 暂存所有并提交 | gcam "feat: 新功能" |
| 3 | 拉取最新代码 | gprom |
| 4 | 创建新分支 | gcb feature/xxx |
| 5 | 切回主分支 | gcm |
| 6 | 推送并设上游 | gpsup |
| 7 | 查看图形日志 | glog |
| 8 | 暂存改动切分支 | gstu → 切分支 → gstp |
| 9 | 查看文件差异 | gd |
| 10 | 修改上次提交 | gc! |
参考资源