跳到主要内容

Git 常用指令速查手册

这份文档旨在提供最实用、最高频的 Git 指令,按开发场景分类,便于快速查找。

目录​

  1. 初始化与配置
  2. 日常工作流 (暂存与提交)
  3. 查看状态与日志
  4. 分支管理 (Branch)
  5. 远程同步 (Remote)
  6. 后悔药 (撤销与回滚)
  7. 暂存工作现场 (Stash)
  8. 进阶:整理提交记录 (Rebase)
  9. 多任务并行 (Worktree)
  10. 定向采集 (Cherry-pick)
  11. 高效技巧与总结

1. 初始化与配置​

指令说明
git init在当前目录初始化一个新的 Git 仓库
git clone <url>克隆远程仓库到本地
git config --global user.name "Your Name"设置全局用户名
git config --global user.email "email@example.com"设置全局邮箱
git config --list查看当前所有的 Git 配置

2. 日常工作流 (暂存与提交)​

指令说明
git add .将当前目录下所有修改添加到暂存区 (常用)
git add <file>仅将指定文件添加到暂存区
git commit -m "说明"提交暂存区的内容,并附带提交说明
git commit --amend -m "新说明"修改最后一次提交(用于修正写错的 commit message 或补漏文件),不产生新记录

3. 查看状态与日志​

指令说明
git status最常用。查看当前工作区状态(哪些文件被修改、哪些在暂存区)
git diff查看工作区与暂存区的具体代码差异
git log查看完整的提交历史
git log --oneline简洁模式。每条日志只显示一行(Hash + 说明),方便概览
git log --oneline --graph以图形化方式查看分支合并历史

4. 分支管理 (Branch)​

指令说明
git branch列出本地所有分支,* 标记当前所在分支
git branch -a列出本地和远程的所有分支
git branch <branch-name>创建新分支(但不切换过去)
git checkout <branch-name>切换到指定分支
git switch <branch-name>切换分支(新版本 Git 推荐用法,语义更清晰)
git checkout -b <branch-name>创建并立即切换到新分支 (常用)
git merge <branch-name>将指定分支合并到当前分支
git branch -d <branch-name>删除已合并的本地分支
git branch -D <branch-name>强制删除未合并的分支

5. 远程同步 (Remote)​

指令说明
git remote -v查看远程仓库地址
git pull拉取远程代码并自动合并 (相当于 fetch + merge)
git pull --rebase拉取远程代码并使用变基方式合并(保持提交记录是一条直线,推荐)
git push推送本地代码到远程仓库
git push -u origin <branch-name>推送新分支并建立追踪关系(第一次推送新分支时使用)
git fetch仅下载远程更新,不合并到本地代码(安全操作)

6. "后悔药" (撤销与回滚) ⚠️ 重点​

这些指令在出错时非常有用,但请谨慎使用。

场景指令说明
放弃工作区的修改git checkout -- <file>丢弃某个文件的修改,恢复到最近一次 commit 的状态(不可逆!)
暂存区退回工作区git reset HEAD <file>git add 之后后悔了,想把文件从暂存区拿出来,但保留修改
回退版本 (保留修改)git reset --soft HEAD^撤销最近一次 commit,但保留代码修改在暂存区(软重置)
回退版本 (彻底重置)git reset --hard HEAD^撤销最近一次 commit,彻底删除修改(危险操作,慎用!)
回退到指定版本git reset --hard <commit-hash>强制将当前分支重置到指定的 Commit ID

7. 暂存工作现场 (Stash)​

当你正在修 Bug,突然要切换分支处理紧急任务,但当前代码又不想 Commit 时使用。

指令说明
git stash将当前未提交的修改(工作区和暂存区)保存到堆栈中,让工作区变干净
git stash save "备注"带备注的暂存,方便以后查找
git stash list查看所有暂存记录
git stash pop恢复最近一次暂存的内容,并从堆栈中删除
git stash apply恢复最近一次暂存的内容,但不删除记录
git stash clear清空所有暂存记录

8. 进阶:整理提交记录 (Rebase)​

Rebase(变基)能让你的提交历史像一条直线一样干净,但需要谨慎使用。

指令说明
git rebase <branch>将当前分支变基到目标分支上(移动“基底”),常用于保持分支历史整洁
git rebase -i HEAD~n交互式变基(n为数量)。进入编辑器界面,可自由定制最近 n 次提交
git rebase --continue解决冲突后,继续变基过程
git rebase --abort放弃变基,恢复原状

交互式变基指令详解​

执行 git rebase -i 后会进入编辑器,每一行代表一次提交。修改行首单词即可操作:

命令简写功能说明
pickp保留该提交(默认)
rewordr保留代码,但修改提交说明 (Commit Message)
edite暂停变基。允许你停下来修改文件或追加内容,完成后执行 git rebase --continue
squashs合并该提交到上一个(更早的)提交中,需手动合并提交说明
fixupf类似 squash,但直接丢弃当前提交的说明(常用于纯粹的代码修补)
dropd删除该提交(对应的代码修改也会消失!)

⚠️ 黄金法则:永远不要在公共分支(如 master/main/develop)上使用 Rebase,只在自己私有的功能分支上使用。否则会给队友带来巨大的麻烦。


9. 多任务并行 (Worktree)​

当你需要在同一个仓库中同时处理多个分支(例如:正在开发功能 A,突然要修 Bug B),除了 stash,你还可以使用 worktree 创建一个关联的独立工作目录。

指令说明
git worktree add <path> <branch>在指定路径创建一个新的工作树,并检出已有分支
git worktree add -b <new-branch> <path> <base-branch>在指定路径创建一个新的工作树,并新建分支
git worktree list查看所有工作树
git worktree remove <path>删除指定路径的工作树
git worktree prune清理已不存在的工作树记录(例如手动删除了文件夹后使用)

使用场景示例: 假设你在 project/ 目录下开发新功能,突然需要修紧急 Bug:

  1. 执行 git worktree add ../project-hotfix hotfix/login-bug
  2. Git 会在 project 同级目录创建一个 project-hotfix 文件夹。
  3. 你可以同时打开两个编辑器窗口,一边继续开发新功能,一边在 project-hotfix 里修 Bug,互不干扰。

10. 定向采集 (Cherry-pick)​

当你只需要某个特定的提交(比如修复了一个 Bug),而不需要合并整个分支时,Cherry-pick 是最佳选择。

指令说明
git cherry-pick <commit-hash>将指定的提交复制并应用到当前分支(生成一个新的 Commit ID)
git cherry-pick <hash-A> <hash-B>挑选多个非连续的提交
git cherry-pick <hash-A>..<hash-B>挑选连续的提交区间(不包含 A,包含 B)
git cherry-pick --abort发生冲突时,放弃拣选,恢复原状
git cherry-pick --continue解决冲突后,继续拣选过程

11. 🚀 高效技巧与总结​

常用简写 (Alias)​

配置别名可以大幅提升手速:

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

救命稻草 Reflog​

如果你不小心 reset --hard 弄丢了代码,或者误删了分支,不要慌:

  1. 输入 git reflog 查看所有操作记录(包括被回退的)。
  2. 找到之前的 Commit Hash。
  3. 用 git reset --hard <commit-hash> 穿梭回去。

保持整洁​

  • 清理分支:git fetch -p (prune) 可以清理掉本地缓存的、但远程已经被删除的分支引用。
  • 忽略文件:务必维护好 .gitignore,不要把 node_modules、.env 等临时或敏感文件提交上去。