Git memo
A searchable cheat sheet of everyday Git commands grouped by basics, branches, remotes, undo, staging, log, tags, submodules, rebase and more.
Runs in your browserEvery computation happens in your browser — your data never leaves this device.
Total 187 / 187 commands
| Command | Description |
|---|---|
git init | Initialize a new repository in the current directory 在当前目录初始化新的 Git 仓库 |
git clone <url> | Clone a remote repository 克隆远程仓库到本地 |
git clone --depth 1 <url> | Shallow clone with only the latest commit, useful for huge repositories 浅克隆:只取最近一次提交,适合大仓库 |
git clone --recurse-submodules <url> | Clone a repository including its submodules 克隆仓库并同时检出子模块 |
git status | Show the status of the working tree and the index 查看工作区与暂存区状态 |
git status -s | Show the status in the compact two-column format 用简洁的两列格式输出状态 |
git status -sb | Compact status with branch and upstream tracking info 简洁格式并显示当前分支与上游差距 |
git add <file> | Stage the changes of a file 把指定文件的改动加入暂存区 |
git add -A | Stage every change, including new and deleted files 暂存全部改动(包含新增与删除) |
git add -u | Stage modifications and deletions of tracked files only 只暂存已跟踪文件的修改与删除 |
git add -p | Interactively pick the hunks to stage 交互式逐块挑选要暂存的内容 |
git add -f <file> | Force-add a file that .gitignore excludes 强制暂存被 .gitignore 忽略的文件 |
git commit -m "msg" | Commit the staged changes 提交暂存区的改动 |
git commit -am "msg" | Stage tracked files and commit in one step 暂存已跟踪文件的改动并提交 |
git commit --amend | Amend the most recent commit, message included 修改最近一次提交(内容与提交信息) |
git commit --amend --no-edit | Fold staged changes into the last commit, keeping its message 把暂存内容并入最近一次提交但不改提交信息 |
git commit --allow-empty -m "msg" | Create an empty commit without changes 创建一次不含改动的空提交 |
git config --global user.name "name" | Set the global user name 设置全局用户名 |
git config --global user.email "mail" | Set the global email address 设置全局邮箱 |
git config --global core.editor vim | Set the default commit message editor 设置默认的提交信息编辑器 |
git config --global core.autocrlf input | Configure line ending handling, common for cross-platform work 设置换行符处理策略(跨平台协作常用) |
git config --global alias.st status | Define a command alias, so git st works later 配置命令别名,例如之后可用 git st |
git config --list --show-origin | List all effective configuration with its source file 查看全部生效配置及其来源文件 |
git help <command> | Open the manual for a command 查看命令手册 |
git rm <file> | Delete a file and stage the deletion 删除文件并把删除动作暂存 |
git rm --cached <file> | Stop tracking a file while keeping it on disk 停止跟踪文件但保留本地内容 |
git rm -r --cached <dir> | Recursively untrack a directory, often after adding .gitignore 递归停止跟踪目录(常用于补 .gitignore) |
git mv <old> <new> | Rename a file and stage the rename 重命名文件并暂存这次改名 |
git clean -n | Dry-run the untracked file cleanup 预演会删掉哪些未跟踪文件 |
git clean -fd | Remove untracked files and directories 删除未跟踪的文件与目录 |
git clean -fdx | Also remove files that .gitignore excludes 连同 .gitignore 忽略的文件一起删除 |
git check-ignore -v <file> | Show which ignore rule matches a file 查看文件命中了哪条忽略规则 |
git archive HEAD -o snapshot.zip | Export the current snapshot as an archive without the .git directory 把当前快照导出为压缩包(不含 .git) |
git branch | List local branches 列出本地分支 |
git branch -a | List local and remote branches 列出本地与远程分支 |
git branch -vv | Show branches with upstream and ahead/behind counts 查看分支及其上游与领先、落后情况 |
git branch <name> | Create a branch at the current commit 在当前提交上创建分支 |
git branch -m <old> <new> | Rename a branch 重命名分支 |
git branch -d <name> | Delete a branch that is already merged 删除已经合并的分支 |
git branch -D <name> | Force delete a branch even if it is unmerged 强制删除分支(可能丢失提交) |
git branch --merged | List branches already merged into HEAD 列出已合并进当前分支的分支 |
git branch --no-merged | List branches that are not merged yet 列出尚未合并的分支 |
git branch --contains <commit> | Show which branches contain a commit 查看哪些分支包含某个提交 |
git switch <branch> | Switch to a branch 切换到分支 |
git switch -c <branch> | Create and switch to a new branch 创建并切换到新分支 |
git switch -c <branch> <start-point> | Create and switch to a branch starting from a given commit 基于指定提交创建并切换分支 |
git switch - | Switch back to the previous branch 切回上一个分支 |
git switch --detach <commit> | Check out a commit in detached HEAD state 以分离头指针方式检出某个提交 |
git checkout <branch> | Switch branches, the older syntax of git switch 切换分支(旧写法,等价 git switch) |
git checkout -b <branch> | Create and switch to a branch, the older syntax 创建并切换分支(旧写法) |
git checkout -- <file> | Discard unstaged changes of a file 丢弃工作区中该文件的未暂存改动 |
git merge <branch> | Merge a branch into the current one 把指定分支合并进当前分支 |
git merge --no-ff <branch> | Merge without fast-forwarding, keeping a merge commit 禁止快进合并,保留一条合并提交 |
git merge --squash <branch> | Squash all changes of a branch into one staged change 把分支所有改动压成一次待提交改动 |
git merge --no-commit <branch> | Merge without committing so you can inspect the result 合并但不自动提交,便于检查结果 |
git merge --abort | Abort the merge in progress 放弃正在进行的合并 |
git merge-base <a> <b> | Find the common ancestor of two branches 找出两个分支的共同祖先提交 |
git remote -v | List remotes with their URLs 查看远程仓库名称与地址 |
git remote add origin <url> | Add a remote repository 添加远程仓库 |
git remote remove <name> | Remove a remote configuration 删除远程仓库配置 |
git remote set-url origin <url> | Change a remote URL 修改远程仓库地址 |
git remote rename <old> <new> | Rename a remote 重命名远程仓库 |
git remote show origin | Show details of a remote and its branch mapping 查看远程仓库详情与分支对应关系 |
git fetch | Fetch remote updates without merging 拉取远程更新但不合并 |
git fetch --all --prune | Fetch all remotes and prune deleted remote branches 拉取全部远程并清理已删除的远程分支 |
git fetch origin <branch> | Fetch a single remote branch 只拉取指定远程分支 |
git pull | Fetch and merge the remote branch 拉取并合并远程分支 |
git pull --rebase | Fetch and rebase local commits on top 拉取后用变基方式整合本地提交 |
git pull --ff-only | Only pull when a fast-forward is possible 只在能快进时拉取,避免意外合并 |
git push | Push the current branch to its upstream 推送当前分支到它的上游 |
git push -u origin main | Push for the first time and set the upstream 首次推送并设置上游分支 |
git push --force-with-lease | Force push safely: fails if someone else pushed first 安全强推:远程有别人的新提交时会失败 |
git push -f | Force push, overwriting remote history — use with care 强制推送,会覆盖远程历史(谨慎使用) |
git push origin --delete <branch> | Delete a remote branch 删除远程分支 |
git push <remote> <local>:<remote-branch> | Push a local branch to a differently named remote branch 把本地分支推送到指定远程分支名 |
git ls-remote --heads origin | List remote head references without downloading objects 列出远程分支引用(不下载对象) |
git restore <file> | Restore a file from the index, discarding working tree changes 把文件恢复到暂存区版本,丢弃工作区改动 |
git restore --staged <file> | Unstage a file while keeping its changes 把文件移出暂存区但保留改动 |
git restore --source HEAD~2 <file> | Restore a file from two commits ago 把文件恢复到两次提交之前的内容 |
git restore :/ | Discard unstaged changes across the whole working tree 丢弃整个工作区的未暂存改动 |
git reset --soft HEAD~1 | Undo the last commit, keeping its changes staged 撤销最近一次提交,改动保留在暂存区 |
git reset HEAD~1 | Undo the last commit, keeping its changes unstaged 撤销最近一次提交,改动回到工作区 |
git reset --hard HEAD~1 | Undo the last commit and throw the changes away 撤销提交并丢弃所有改动 |
git reset --hard origin/main | Hard reset the local branch onto the remote version 把本地分支强制对齐到远程版本 |
git reset -p | Interactively unstage hunks 交互式取消部分暂存内容 |
git revert <commit> | Create a new commit that undoes another one 新建一次提交来抵消指定提交 |
git revert --no-commit <commit> | Apply the inverse changes without committing 反向应用改动但不自动提交 |
git revert -m 1 <merge-commit> | Revert a merge commit using its first parent 撤销一次合并提交(保留第一父提交方向) |
git stash | Stash the uncommitted changes 把未提交的改动暂存起来 |
git stash push -m "msg" | Stash the changes with a message 带说明地暂存改动 |
git stash push -- <file> | Stash changes of specific files only 只暂存指定文件的改动 |
git stash list | List the stashes 查看暂存列表 |
git stash pop | Apply the latest stash and drop it 恢复最近一次暂存并删除该记录 |
git stash apply stash@{1} | Apply a specific stash and keep it in the list 恢复指定暂存但保留记录 |
git stash show -p stash@{0} | Show the diff stored in a stash 查看某次暂存的具体改动 |
git stash drop stash@{0} | Drop a stash entry 删除某条暂存记录 |
git stash clear | Clear every stash 清空全部暂存记录 |
git checkout <commit> -- <file> | Check out a file as of a specific commit 从指定提交里取出该文件的内容 |
git diff | Show differences between the working tree and the index 查看工作区与暂存区的差异 |
git diff --staged | Show the staged changes that are about to be committed 查看已暂存、即将提交的差异 |
git diff HEAD | Show all changes relative to HEAD 查看工作区相对最新提交的全部改动 |
git diff <a> <b> | Compare two commits or branches 对比两个提交或分支的差异 |
git diff --stat | Show a diffstat instead of the full diff 只显示改动统计 |
git diff --name-only | List only the changed file names 只列出有改动的文件名 |
git diff --word-diff | Show word-level differences, handy for prose 按词显示差异,适合文档类文件 |
git diff main...feature | Show the changes on a branch since it diverged 查看 feature 相对分叉点的改动 |
git add -i | Enter the interactive staging interface 进入交互式暂存界面 |
git update-index --assume-unchanged <file> | Tell Git to ignore changes in a file for now 让 Git 暂时忽略该文件的改动 |
git update-index --skip-worktree <file> | Mark a file as locally modified and skip change tracking 标记文件为本地专用,抑制改动提示 |
git apply <patch> | Apply a patch file to the working tree 把补丁文件应用到工作区 |
git format-patch -1 <commit> | Export a commit as a patch file 把一次提交导出为补丁文件 |
git am <patch> | Apply a mailbox-format patch, keeping the commit message 应用邮件格式补丁并保留提交信息 |
git add -N <file> | Register a new file without staging content so it shows in diffs 只登记新文件而不暂存内容,便于查看 diff |
git log | Show the commit history 查看提交历史 |
git log --oneline | Show one summary line per commit 每条提交显示一行摘要 |
git log --oneline --graph --decorate --all | Show a graph of every branch with ref decorations 图形化查看全部分支的历史 |
git log -p | Show history together with each patch 查看历史并附带每次提交的 diff |
git log --stat | Show history with a per-commit diffstat 查看历史并附带改动统计 |
git log -n 5 | Show only the last 5 commits 只看最近 5 条提交 |
git log --author="name" | Filter commits by author 按作者筛选提交 |
git log --since="2 weeks ago" | Filter commits by a date range 按时间范围筛选提交 |
git log --grep="fix" | Search commit messages for a keyword 按提交信息关键字筛选 |
git log -S "text" | Find commits that added or removed a piece of text 找出新增或删除过某段文本的提交 |
git log --follow <file> | Follow a file across renames 追踪文件被改名前的历史 |
git log <branch> --not main | Show commits reachable from a branch but not from main 查看某分支独有的提交 |
git log --merges --oneline | Show merge commits only 只看合并提交 |
git log --diff-filter=D --name-only | List files that were deleted 列出被删除过的文件 |
git show <commit> | Show the full contents of a commit 查看某次提交的完整内容 |
git show HEAD:<file> | Show a file as of a commit 查看某次提交里该文件的内容 |
git show --stat --oneline HEAD | Show the last commit as a one-line summary with a diffstat 用一行摘要加统计查看最近一次提交 |
git blame <file> | Show the last author and commit for each line 逐行查看最后修改者与对应提交 |
git blame -L 10,20 <file> | Blame only a range of lines 只查看指定行范围的 blame |
git shortlog -sn | Summarize the commit count per author 按作者统计提交数量 |
git reflog | Show the HEAD reflog, useful to recover lost commits 查看 HEAD 移动历史,可用来找回误删提交 |
git rev-parse HEAD | Print the full hash of HEAD 输出 HEAD 的完整哈希值 |
git tag | List all tags 列出所有标签 |
git tag -a v1.0.0 -m "release" | Create an annotated tag 创建带注释的标签 |
git tag v1.0.0 | Create a lightweight tag 创建轻量标签 |
git tag -a v1.0.1 <commit> | Tag an older commit 给历史提交补打标签 |
git tag -d v1.0.0 | Delete a local tag 删除本地标签 |
git push origin v1.0.0 | Push a single tag to the remote 推送单个标签到远程 |
git push --tags | Push all tags 推送全部标签 |
git push origin --delete v1.0.0 | Delete a remote tag 删除远程标签 |
git show v1.0.0 | Show the commit a tag points to 查看标签指向的提交 |
git describe --tags | Describe HEAD using the nearest tag 用最近的标签描述当前提交 |
git checkout tags/v1.0.0 | Check out the commit a tag points to 检出某个标签对应的提交 |
git tag --sort=-creatordate | List tags sorted by creation date, newest first 按创建时间倒序列出标签 |
git submodule add <url> <path> | Add a submodule at a path 在指定路径添加子模块 |
git submodule init | Initialize the submodule configuration 初始化子模块配置 |
git submodule update | Check out the submodule commits recorded by the parent 检出父仓库记录的子模块提交 |
git submodule update --init --recursive | Initialize and check out all submodules recursively 初始化并递归检出全部子模块 |
git submodule update --remote | Update submodules to the latest remote commit 把子模块更新到其远程最新提交 |
git submodule foreach "git pull" | Run the same command inside every submodule 在每个子模块里执行同一条命令 |
git submodule status | Show the recorded commit and status of each submodule 查看子模块当前提交与状态 |
git submodule deinit -f <path> | Deinitialize a submodule before removing its directory 取消子模块初始化(配合删除目录) |
git clone --recurse-submodules --remote <url> | Clone and track the remote branch in submodules 克隆并让子模块跟随远程分支 |
git rebase <branch> | Move the current branch on top of another branch 把当前分支的提交移到目标分支之上 |
git rebase -i HEAD~3 | Interactively edit the last 3 commits 交互式整理最近 3 次提交 |
git rebase --continue | Continue the rebase after resolving conflicts 解决冲突后继续变基 |
git rebase --abort | Abort the rebase and return to the original state 放弃变基并回到初始状态 |
git rebase --skip | Skip the current patch and continue 跳过当前补丁继续变基 |
git rebase --onto main base topic | Replay the commits after base from topic onto main 把 topic 上 base 之后的提交搬到 main 上 |
git rebase --autosquash -i HEAD~5 | Automatically arrange fixup and squash commits 自动整理 fixup 与 squash 提交 |
git pull --rebase origin main | Rebasing pull to avoid extra merge commits 变基式拉取,避免多余的合并提交 |
git cherry-pick <commit> | Copy a commit onto the current branch 把指定提交复制到当前分支 |
git cherry-pick <a>..<b> | Cherry-pick a range of commits 复制一段范围的提交 |
git cherry-pick -n <commit> | Apply the changes without committing 只应用改动,不立即提交 |
git cherry-pick --abort | Abort the cherry-pick in progress 放弃正在进行的 cherry-pick |
git bisect start | Start a bisect session to find a bad commit 开始二分查找定位引入问题的提交 |
git bisect good <commit> | Mark a commit as known good 标记一个已知正常的提交 |
git bisect bad | Mark the checked-out commit as bad 把当前检出的提交标记为有问题 |
git bisect reset | End the bisect session and go back 结束二分查找并回到原分支 |
git worktree add ../dir <branch> | Check out a branch of the same repository into another directory 在另一个目录检出同一仓库的分支 |
git worktree list | List all worktrees 列出全部工作树 |
git worktree remove ../dir | Remove a worktree 删除工作树 |
git grep "text" | Search tracked files for text 在已跟踪文件里搜索文本 |
git ls-files | List every tracked file 列出全部已跟踪文件 |
git notes add -m "note" | Attach a note to a commit without changing its hash 给某次提交添加备注(不改提交哈希) |
git cat-file -p <object> | Show the raw content of a Git object 查看 Git 对象的原始内容 |
git hash-object <file> | Compute the Git hash of a file content 计算文件内容的 Git 哈希 |
git symbolic-ref HEAD | Show the branch HEAD points to 查看 HEAD 当前指向的分支 |
git show-ref | List every reference in the repository 列出仓库内的全部引用 |
git gc | Garbage collect and compress repository objects 清理并压缩仓库对象,回收空间 |
git fsck --lost-found | Check repository integrity and recover dangling objects 检查仓库完整性并找回悬空对象 |
git count-objects -vH | Show repository object size statistics 统计仓库对象占用空间 |
git maintenance start | Register background repository maintenance 注册后台仓库维护任务 |
git bundle create repo.bundle --all | Bundle the whole repository into a single file for offline transfer 把整个仓库打包成单个文件以便离线传递 |
Category: All categories
What this tool does
- Stop guessing between reset and revert: browse the undo category to find everything from keeping your changes to throwing them away.
- Search by situation instead of memorising flags: type "undo", "stash list" or "rebase" and the command text plus both descriptions are matched.
- Paste commands into a ticket or a doc — every entry is one click away, so you never mistype long flags such as --amend or --autosquash again.
- Give new teammates a searchable command list: 187 commands grouped into 10 categories beats scrolling through man pages.
Example
Input
Search "撤销", category "All categories"
Output
git reset --soft HEAD~1 — undo the last commit, changes stay staged git reset HEAD~1 — undo the last commit, changes go back to the working tree git reset --hard HEAD~1 — undo the commit and discard all changes git revert -m 1 <merge-commit> — revert a merge commit (following the first parent)
Search matches the command, the Chinese description and the English description. Multiple keywords are separated by spaces and must all match (AND).
Frequently asked questions
Is the search fuzzy or exact?
It is a case-insensitive substring search. Multiple keywords combine with AND, so "stash list" returns commands containing both words (such as git stash list) and hides commands matching only one of them.
What is the difference between reset --soft, reset and reset --hard?
All three move the branch pointer; what differs is where your changes end up. --soft keeps them staged, the default --mixed returns them to the working tree and unstages them, and --hard throws them away entirely. Use --hard only when you are certain you want them gone.
Should I use revert or reset?
reset rewrites history, so it only suits local commits you have not pushed. revert creates a new commit that undoes a chosen one, which keeps history intact and is the right choice for shared branches. To undo a merge commit, use revert -m 1 <merge-commit>.
Will any of these commands run on my machine?
No. This is a cheat sheet: the page only filters and copies text. It never invokes git and never touches your repositories.
Will more commands be added?
There are 187 today across ten categories — basics, branches, remotes, undo, staging and diff, log, tags, submodules, rebase and other. The counts are shown in the filter bar so you can tell which version you are looking at.
Keywords:gitgit 命令cheat sheet速查rebasestashcherry-picksubmodulegit memo