前提:你的.zshrc里需要启用 git 插件:plugins=(... git)
基础概念:三个区域
Git 的文件在三个区域之间流转,理解了这个,后面所有命令都好懂:初始化与配置
SSH 密钥配置
用 HTTPS 每次推送都要输密码,配置 SSH 密钥后就能免密操作。1. 检查是否已有密钥
2. 生成密钥
推荐用 Ed25519:比传统 RSA 更安全、更快、密钥更短。GitHub 已屏蔽旧版 RSA/SHA-1 签名。
- 建议自定义文件名(如
~/.ssh/github_ed25519),避免多个服务的密钥互相覆盖 - 密码(passphrase)可以直接回车留空,设了的话每次 push 都要输
3. 添加到 ssh-agent
~/.ssh/config 中配置自动加载,省得每次手动添加:
4. 添加公钥到 GitHub
5. 验证连接
多账号配置
如果你有多个 GitHub 账号(比如个人 + 公司),需要在~/.ssh/config 中用 Host 别名区分:
github.com 换成别名:
日常提交三连
最核心的操作流程:改代码 → 暂存 → 提交。暂存文件
| 操作 | 命令 | 别名 |
|---|---|---|
| 暂存指定文件 | 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 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:
我的高频操作 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! |
