Git Cheat Sheet - 快速参考指南,收录常用语法、命令与实践。
创建新的本地仓库 (Create new local repository)
$ git init [project-name]
克隆远程仓库 (Clone remote repository)
$ git clone <url>
# 克隆到指定目录
$ git clone <url> my-directory
# 浅克隆(只获取最新提交,适合大仓库)
$ git clone --depth 1 <url>
# 克隆指定分支
$ git clone -b <branch> <url>
# 设置用户名(全局)
$ git config --global user.name "Your Name"
# 设置邮箱(全局)
$ git config --global user.email "you@example.com"
# 设置默认编辑器
$ git config --global core.editor "code --wait"
# 启用颜色输出
$ git config --global color.ui auto
# 设置默认分支名
$ git config --global init.defaultBranch main
# 查看配置
$ git config --list
$ git config --global --list
# 编辑全局配置
$ git config --global --edit
查看工作区状态 (Check status)
$ git status
$ git status -s # 简洁模式
暂存文件 (Stage files)
# 暂存单个文件
$ git add <file>
# 暂存所有更改
$ git add .
$ git add -A
# 暂存部分更改(交互模式)
$ git add -p
提交更改 (Commit changes)
# 提交暂存的更改
$ git commit -m "commit message"
# 暂存并提交所有已跟踪文件
$ git commit -am "commit message"
# 修改上次提交
$ git commit --amend -m "new message"
# 修改上次提交但不改消息
$ git commit --amend --no-edit
# 空提交(用于触发 CI)
$ git commit --allow-empty -m "trigger CI"
撤销更改 (Undo changes)
# 撤销工作区更改(未暂存)
$ git restore <file>
$ git checkout -- <file>
# 取消暂存
$ git restore --staged <file>
$ git reset <file>
# 重置到上次提交
$ git reset --hard
# 撤销某次提交(创建新提交)
$ git revert <commit>
# 工作区 vs 暂存区
$ git diff
# 暂存区 vs 最新提交
$ git diff --staged
$ git diff --cached
# 工作区 vs 最新提交
$ git diff HEAD
# 比较两个分支
$ git diff branch1..branch2
# 比较两次提交
$ git diff <commit1> <commit2>
# 只显示文件名
$ git diff --name-only
# 统计更改
$ git diff --stat
# 列出本地分支
$ git branch
# 列出所有分支(含远程)
$ git branch -a
$ git branch -av # 显示详情
# 创建新分支
$ git branch <branch-name>
# 切换分支
$ git checkout <branch>
$ git switch <branch> # Git 2.23+
# 创建并切换分支
$ git checkout -b <branch>
$ git switch -c <branch>
# 重命名分支
$ git branch -m <old> <new>
# 删除分支
$ git branch -d <branch> # 安全删除
$ git branch -D <branch> # 强制删除
# 查看分支合并状态
$ git branch --merged
$ git branch --no-merged
# 合并分支到当前分支
$ git merge <branch>
# 非快进合并(保留分支历史)
$ git merge --no-ff <branch>
# 只快进合并
$ git merge --ff-only <branch>
# 合并时压缩提交
$ git merge --squash <branch>
# 中止合并
$ git merge --abort
# 变基到目标分支
$ git rebase <branch>
# 交互式变基(修改最近 N 次提交)
$ git rebase -i HEAD~N
# 继续变基
$ git rebase --continue
# 跳过当前提交
$ git rebase --skip
# 中止变基
$ git rebase --abort
# 变基时保留合并提交
$ git rebase --preserve-merges <branch>
# 列出标签
$ git tag
$ git tag -l "v1.*" # 筛选
# 创建轻量标签
$ git tag <tag-name>
# 创建附注标签
$ git tag -a <tag-name> -m "message"
# 给指定提交打标签
$ git tag -a <tag-name> <commit>
# 推送标签到远程
$ git push origin <tag-name>
$ git push origin --tags # 推送所有标签
# 删除标签
$ git tag -d <tag-name>
$ git push origin :refs/tags/<tag-name> # 删除远程标签
# 查看远程仓库
$ git remote
$ git remote -v
# 添加远程仓库
$ git remote add <name> <url>
# 修改远程仓库 URL
$ git remote set-url origin <new-url>
# 重命名远程仓库
$ git remote rename <old> <new>
# 删除远程仓库
$ git remote rm <name>
# 查看远程仓库详情
$ git remote show origin
# 获取远程更新(不合并)
$ git fetch
$ git fetch origin
$ git fetch --all # 所有远程
# 拉取并合并
$ git pull
$ git pull origin <branch>
# 拉取并变基
$ git pull --rebase
# 推送到远程
$ git push origin <branch>
# 推送并设置上游
$ git push -u origin <branch>
# 强制推送(谨慎使用)
$ git push --force
$ git push --force-with-lease # 更安全
# 删除远程分支
$ git push origin --delete <branch>
# 跟踪远程分支
$ git checkout --track origin/<branch>
# 设置上游分支
$ git branch -u origin/<branch>
# 查看跟踪关系
$ git branch -vv
# 清理已删除的远程分支
$ git fetch --prune
$ git remote prune origin
# 挑选单个提交
$ git cherry-pick <commit>
# 挑选多个提交
$ git cherry-pick <commit1> <commit2>
# 挑选范围
$ git cherry-pick <start>..<end>
# 只暂存不提交
$ git cherry-pick -n <commit>
# 继续/中止
$ git cherry-pick --continue
$ git cherry-pick --abort
# 查看提交历史
$ git log
# 简洁模式
$ git log --oneline
# 显示差异
$ git log -p
# 显示统计
$ git log --stat
# 限制数量
$ git log -n 10
$ git log -10
# 时间范围
$ git log --since="2024-01-01"
$ git log --until="2024-12-31"
$ git log --after="1 week ago"
# 按作者筛选
$ git log --author="name"
# 按提交信息筛选
$ git log --grep="keyword"
# 按内容搜索
$ git log -S "code pattern"
# 分支图
$ git log --graph --oneline --all
# 美化输出
$ git log --pretty=format:"%h %an %ar - %s"
# 常用格式
$ git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
# 显示分支关系
$ git log --graph --decorate --all
# 查看文件历史
$ git log -- <file>
$ git log -p -- <file>
# 跟踪文件重命名
$ git log --follow <file>
# 查看文件每行作者
$ git blame <file>
$ git blame -L 10,20 <file> # 指定行范围
# 查看提交详情
$ git show <commit>
$ git show <commit>:<file>
# A 有而 B 没有的提交
$ git log B..A
$ git log origin/main..HEAD
# 两边各自独有的提交
$ git log A...B
# 统计差异
$ git shortlog -sn
# 查看谁贡献了代码
$ git shortlog -sn --all
# 软重置:只移动 HEAD,保留暂存和工作区
$ git reset --soft <commit>
# 混合重置(默认):移动 HEAD,重置暂存区
$ git reset --mixed <commit>
$ git reset <commit>
# 硬重置:完全重置到指定提交
$ git reset --hard <commit>
# 重置到上一个提交
$ git reset --hard HEAD~1
# 重置单个文件
$ git reset HEAD <file>
# 撤销提交(创建新提交)
$ git revert <commit>
# 撤销多个提交
$ git revert <commit1> <commit2>
# 撤销但不自动提交
$ git revert -n <commit>
# 撤销合并提交
$ git revert -m 1 <merge-commit>
# 查看引用日志
$ git reflog
$ git reflog show <branch>
# 恢复到某个操作
$ git reset --hard HEAD@{2}
# 创建分支保存丢失的提交
$ git branch recover-branch <commit>
# 查看悬空对象
$ git fsck --lost-found
# 暂存当前更改
$ git stash
$ git stash save "message"
# 包含未跟踪文件
$ git stash -u
$ git stash --include-untracked
# 列出暂存
$ git stash list
# 恢复最近的暂存
$ git stash pop
# 恢复指定暂存
$ git stash pop stash@{n}
# 应用但不删除
$ git stash apply
# 删除暂存
$ git stash drop stash@{n}
$ git stash clear # 删除所有
# 从暂存创建分支
$ git stash branch <branch-name>
# 修改最近 5 次提交
$ git rebase -i HEAD~5
在编辑器中可用的命令:
pick = 使用提交
reword = 使用提交,修改消息
edit = 使用提交,停下来修改
squash = 与前一个提交合并
fixup = 与前一个提交合并,丢弃消息
drop = 删除提交
示例:合并提交
# 原始状态
pick abc1234 First commit
pick def5678 Second commit
pick ghi9012 Third commit
# 修改为
pick abc1234 First commit
squash def5678 Second commit
squash ghi9012 Third commit
# 创建工作树
$ git worktree add <path> <branch>
$ git worktree add ../feature feature-branch
# 创建新分支的工作树
$ git worktree add -b <new-branch> <path>
# 列出工作树
$ git worktree list
# 删除工作树
$ git worktree remove <path>
# 清理过时的工作树
$ git worktree prune
# 添加子模块
$ git submodule add <url> <path>
# 初始化子模块
$ git submodule init
# 更新子模块
$ git submodule update
$ git submodule update --init --recursive
# 克隆时包含子模块
$ git clone --recursive <url>
# 更新到最新
$ git submodule update --remote
# 删除子模块
$ git submodule deinit <path>
$ git rm <path>
# 开始二分查找
$ git bisect start
# 标记当前为坏
$ git bisect bad
# 标记某个提交为好
$ git bisect good <commit>
# Git 会自动检出中间版本
# 测试后标记
$ git bisect good # 或 bad
# 结束查找
$ git bisect reset
# 自动查找(提供测试脚本)
$ git bisect run ./test.sh
# 移动/重命名文件
$ git mv <old-path> <new-path>
# 删除文件
$ git rm <file>
# 从暂存区移除但保留文件
$ git rm --cached <file>
# 删除已忽略的缓存文件
$ git rm -r --cached .
$ git add .
# 注释
# 忽略所有 .log 文件
*.log
# 忽略 node_modules 目录
node_modules/
# 忽略根目录的文件
/config.local.js
# 不忽略特定文件
!important.log
# 忽略所有 .env 文件但保留示例
.env*
!.env.example
# 忽略构建目录
dist/
build/
*.min.js
# 忽略 IDE 配置
.idea/
.vscode/
*.swp
# 忽略系统文件
.DS_Store
Thumbs.db
# 显示将被删除的文件
$ git clean -n
$ git clean --dry-run
# 删除未跟踪文件
$ git clean -f
# 包含目录
$ git clean -fd
# 包含忽略的文件
$ git clean -fx
# 交互模式
$ git clean -i
# 查看仓库大小
$ git count-objects -vH
# 找出大文件
$ git rev-list --objects --all | \
git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | \
sed -n 's/^blob //p' | \
sort -rnk2 | head -20
# 使用 Git LFS
$ git lfs install
$ git lfs track "*.psd"
$ git add .gitattributes
# 常用别名
$ 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 --graph --oneline --all"
$ git config --global alias.last "log -1 HEAD"
$ git config --global alias.unstage "reset HEAD --"
$ git config --global alias.undo "reset --soft HEAD~1"
# 查看别名
$ git config --get-regexp alias
# 快速切换到上一个分支
$ git checkout -
# 修改上次提交
$ git commit --amend
# 查看某文件的最后修改
$ git log -1 -- <file>
# 查看谁最后修改了文件
$ git log -1 --format="%an" -- <file>
# 统计代码行数
$ git diff --stat HEAD~10
# 导出指定版本的文件
$ git archive --format=zip HEAD > archive.zip
# 在文件内容中搜索
$ git grep "pattern"
$ git grep -n "pattern" # 显示行号
$ git grep -c "pattern" # 统计次数
# 在历史中搜索
$ git log -S "pattern" # 内容变更
$ git log -G "regex" # 正则匹配
$ git log --all --grep="keyword"
修复错误的分支提交:
# 在错误分支上提交了代码
$ git stash
$ git checkout correct-branch
$ git stash pop
合并冲突解决:
# 查看冲突文件
$ git status
# 解决冲突后
$ git add <resolved-file>
$ git commit
# 使用工具解决
$ git mergetool
# 保留某一方的版本
$ git checkout --ours <file>
$ git checkout --theirs <file>
撤销已推送的提交:
# 方法1: revert(推荐)
$ git revert <commit>
$ git push
# 方法2: reset + force push(谨慎)
$ git reset --hard <commit>
$ git push --force-with-lease
# 主要分支
main/master - 生产环境
develop - 开发环境
# 辅助分支
feature/* - 功能开发
release/* - 发布准备
hotfix/* - 紧急修复
# 功能分支流程
$ git checkout -b feature/new-feature develop
# ... 开发 ...
$ git checkout develop
$ git merge --no-ff feature/new-feature
$ git branch -d feature/new-feature
# 简化流程
main - 永远可部署
# 流程
$ git checkout -b feature-branch
# ... 开发和提交 ...
$ git push -u origin feature-branch
# 创建 Pull Request
# Code Review
# 合并到 main
# 部署
# 开始新功能
$ git checkout main
$ git pull
$ git checkout -b feature/xxx
# 保持同步
$ git fetch origin
$ git rebase origin/main
# 准备提交 PR
$ git push -u origin feature/xxx
# 清理完成的分支
$ git checkout main
$ git branch -d feature/xxx
$ git push origin --delete feature/xxx
<type>(<scope>): <subject>
<body>
<footer>
类型 (type):
feat - 新功能
fix - Bug 修复
docs - 文档更新
style - 代码格式(不影响功能)
refactor - 重构
perf - 性能优化
test - 测试相关
chore - 构建/工具变更
示例:
feat(auth): add login with OAuth2
- Support Google OAuth2
- Add refresh token handling
- Update user model
Closes #123
地址
Level 10b, 144 Edward Street, Brisbane CBD(Headquarter)Level 2, 171 La Trobe St, Melbourne VIC 3000四川省成都市武侯区桂溪街道天府大道中段500号D5东方希望天祥广场B座45A13号Business Hub, 155 Waymouth St, Adelaide SA 5000Disclaimer
JR Academy acknowledges Traditional Owners of Country throughout Australia and recognises the continuing connection to lands, waters and communities. We pay our respect to Aboriginal and Torres Strait Islander cultures; and to Elders past and present. Aboriginal and Torres Strait Islander peoples should be aware that this website may contain images or names of people who have since passed away.
匠人学院网站上的所有内容,包括课程材料、徽标和匠人学院网站上提供的信息,均受澳大利亚政府知识产权法的保护。严禁未经授权使用、销售、分发、复制或修改。违规行为可能会导致法律诉讼。通过访问我们的网站,您同意尊重我们的知识产权。 JR Academy Pty Ltd 保留所有权利,包括专利、商标和版权。任何侵权行为都将受到法律追究。查看用户协议
© 2017-2025 JR Academy Pty Ltd. All rights reserved.
ABN 26621887572