Skip to main content
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 --allgaa
暂存并查看详情git add --verbosegav
交互式选择暂存git add --patchgapa

提交

操作命令别名
提交(打开编辑器写信息)git commit --verbosegc
提交并附带信息git commit --message "msg"gcmsg
暂存所有并提交git commit --all --message "msg"gcam
修改上次提交git commit --amendgc!
修改上次提交(不改信息)git commit --no-edit --amendgcn!

查看变更

操作命令别名
查看未暂存的修改git diffgd
查看已暂存的修改git diff --stagedgds
按单词对比差异git diff --word-diffgdw
查看与上游的差异git diff @{upstream}gdup

分支操作

分支是 Git 的核心杀手锏,随便开、随便切、合完就删。

查看与创建

操作命令别名
查看本地分支git branchgb
查看所有分支(含远程)git branch --allgba
查看远程分支git branch --remotegbr
创建并切换分支git checkout -b <name>gcb
切换分支(推荐新语法)git switch <name>gsw
创建并切换(新语法)git switch -c <name>gswc
切到主分支git checkout $(git_main_branch)gcm

删除与重命名

操作命令别名
删除分支(已合并)git branch --deletegbd
强制删除分支git branch --delete --forcegbD
重命名分支git branch --movegbm

远程操作

拉取

操作命令别名
拉取(merge 方式)git pullgl
拉取(rebase 方式)git pull --rebasegpr
拉取并自动 stashgit pull --rebase --autostashgpra
从 origin 拉取主分支git pull --rebase origin maingprom

推送

操作命令别名
推送git pushgp
首次推送并设置上游git push --set-upstream origin <branch>gpsup
安全强推git push --force-with-leasegpf
强制推送(慎用)git push --forcegpf!
删除远程分支git push origin --delete <branch>gpod

获取

操作命令别名
获取远程更新git fetchgf
获取所有远程 + 清理git fetch --all --tags --prunegfa
获取 origingit fetch origingfo

合并与变基

操作命令别名
合并分支git mergegm
仅快进合并git merge --ff-onlygmff
合并远程主分支git merge origin/maingmom
中止合并git merge --abortgma
变基到主分支git rebase $(git_main_branch)grbm
交互式变基git rebase --interactivegrbi
中止变基git rebase --abortgrba
继续变基git rebase --continuegrbc

暂存工作(Stash)

手头写了一半要切分支?stash 帮你把改动暂时藏起来。
操作命令别名
暂存(含未跟踪文件)git stash --include-untrackedgstu
暂存所有git stash --allgstall
恢复最近一次暂存git stash popgstp
恢复但不删除git stash applygstaa
查看暂存列表git stash listgstl
查看暂存内容git stash show --patchgsts
删除最近一次暂存git stash dropgstd
清空所有暂存git stash cleargstc

撤销与回退

这是最容易搞混的部分。记住一个原则:先确认影响范围,再操作

撤销暂存

git restore --staged <file>       # 把文件从暂存区移回工作区(别名:grst)
git reset -- <file>               # 同上,旧语法(别名:gru)

撤销修改

git restore <file>                # 丢弃工作区修改,恢复到暂存区版本(别名:grs)
git checkout -- <file>            # 同上,旧语法

回退提交

操作命令别名
软回退(保留修改在暂存区)git reset --soft HEAD~1grhs
混合回退(保留修改在工作区)git reset HEAD~1grh
硬回退(丢弃所有修改)git reset --hard HEAD~1grhh
创建一个反向提交git revert <commit>grev
安全提示reset --hard 会丢失未提交的修改,用前三思。优先用 revert 来安全地撤销已推送的提交。

查看历史

操作命令别名
单行日志git log --oneline --decorateglo
图形化日志git log --oneline --decorate --graphglog
图形化 + 所有分支git log --oneline --decorate --graph --allgloga
带文件变更统计git log --statglg
漂亮格式 + 时间git log --graph --pretty=...glol
查看某次提交git show <commit>gsh
查看谁写的(blame)git blame -w <file>gbl

标签

操作命令别名
创建带注释的标签git tag --annotategta
列出标签(按版本排序)git tag | sort -Vgtv
查看最新标签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!

参考资源