为了免得去网上搜罗教程, 在此总结一份简明的 git 命令速查手册

基础

基础件不解释

  • git init
  • git add
  • git commit

查看

  • 查看修改了多少行: git diff --stat
  • 查看修改的文件: git status

追踪

  • 取消add一个文件: git reset HEAD filename
  • 取消追踪已commit的文件: git rm --cached filename

变基

  • 回溯恢复文件:
    • 回到某个commit: git checkout HEAD~1
    • 复制出文件
    • 回到刚才的分支: git checkout -
  • 分支重新开发:
    • git checkout -b new-branch B # 基于B创建新分支
    • git add . && git commit -m "基于 B 的修改" # 在新分支修改
    • git checkout original-branch # 切回原分支
    • git merge new-branch # 合并新分支
  • pick 某个commit的改动到main: git checkout main && git cherrypick abcd
  • 回到某个commit: 等同于撤销, 见下.

撤销

  • 撤销某个未push的 commit (不留痕迹): git reset --hard HEAD~1, 即从 HEAD 到 HEAD~1
    • 如果已提交, 还需要 git push --force origin branchname
  • 撤销某个 commit 的更改(即回到某个commit之前): git revert HEAD 会新增一个提交等于HEAD~1
  • 撤销本次还未commit的修改:
    • 撤销已跟踪的 git restore filename , 等价于 `git checkout – filename ``
    • 撤销并删除未跟踪的 git clean -df
    • 撤销已暂存(add)的 git reset --hard HEAD

修改commit

  • 修改 commit 信息, 未推送:
    • git commit --amend
    • git rebase -i HEAD~3 (交互式修改最近3个)

其他

git checkout 和 git switch

功能 git switch (2.23) git restore (2.23) git checkout
切换分支 ✅ git switch <branch> ✅ git checkout <branch>
创建并切换分支 ✅ git switch -c <branch> ✅ git checkout -b <branch>
检出历史 commit ✅ git checkout <commit>
恢复工作区文件 ✅ git restore <file> ✅ git checkout -- <file>
恢复暂存区文件 ✅ git restore --staged <file> ❌ (需用 git reset
设计目标 专注分支切换 专注文件恢复 多功能(历史遗留)

todo

sub_modules