一、初始化与配置
| 操作 | 命令 |
|---|---|
| 初始化仓库 | git init |
| 克隆仓库 | git clone <url> |
| 设置用户名 | git config user.name "…" |
| 设置邮箱 | git config user.email "…" |
| 查看所有配置 | git config --list |
二、工作区与暂存区
| 操作 | 命令 |
|---|---|
| 查看状态(详细) | git status |
| 查看状态(简洁) | git status -s |
| 添加指定文件 | git add <file> |
| 添加所有变动 | git add . |
| 交互式分块添加 | git add -p |
| 撤销暂存(新版) | git restore --staged <file> |
| 撤销暂存(旧版) | git reset HEAD <file> |
| 丢弃工作区修改(新版) | git restore <file> |
| 丢弃工作区修改(旧版) | git checkout -- <file> |
| 丢弃所有未提交改动 | git reset --hard HEAD |
三、提交
| 操作 | 命令 |
|---|---|
| 提交暂存区 | git commit -m "message" |
| 跳过 add 直接提交已跟踪文件 | git commit -a -m "message" |
| 修正上一次提交(不改 message) | git commit --amend --no-edit |
| 修正上一次提交并改 message | git commit --amend -m "new msg" |
| 追加修改到上一次提交(需先 add) | git commit --amend --no-edit(先 add) |
四、分支
| 操作 | 命令 |
|---|---|
| 列出本地分支 | git branch |
| 列出所有分支(含远程跟踪) | git branch -a |
| 查看分支最后提交 | git branch -v |
| 查看已合并到当前分支的分支 | git branch --merged |
| 创建分支 | git branch <name> |
| 基于指定提交创建分支 | git branch <name> <commit> |
| 创建并切换到新分支 | git switch -c <name> 或 git checkout -b <name> |
| 切换分支 | git switch <name> 或 git checkout <name> |
| 安全删除分支(已合并) | git branch -d <name> |
| 强制删除分支 | git branch -D <name> |
| 重命名分支 | git branch -m <old> <new> |
五、合并与变基
| 操作 | 命令 |
|---|---|
| 合并指定分支到当前 | git merge <branch> |
| 禁止快进合并(保留分支记录) | git merge --no-ff <branch> |
| 压缩合并且不自动提交 | git merge --squash <branch>(还需手动 commit) |
| 取消正在进行的合并 | git merge --abort |
| 变基当前分支到目标 | git rebase <base> |
| 交互式变基最近 N 个提交 | git rebase -i HEAD~N |
| 解决冲突后继续变基 | git rebase --continue |
| 跳过正在变基的当前提交 | git rebase --skip |
| 取消正在进行的变基 | git rebase --abort |
六、远程仓库
| 操作 | 命令 |
|---|---|
| 查看远程仓库列表 | git remote -v |
| 添加远程仓库 | git remote add <name> <url> |
| 移除远程仓库 | git remote remove <name> |
| 重命名远程仓库 | git remote rename <old> <new> |
| 获取所有远程更新(不合并) | git fetch <remote> |
| 获取并清理已删除的远程分支引用 | git fetch -p |
| 拉取并合并远程分支 | git pull |
| 拉取并通过变基整合 | git pull --rebase |
| 推送分支到远程 | git push <remote> <branch> |
| 推送并设置上游跟踪 | git push -u <remote> <branch> |
| 安全强制推送(检查冲突) | git push --force-with-lease |
| 强制推送(覆盖远程历史,危险) | git push --force |
七、查看历史
| 操作 | 命令 |
|---|---|
| 完整提交历史 | git log |
| 单行简洁历史 | git log --oneline |
| 可视化所有分支历史 | git log --graph --oneline --decorate --all |
| 查看某文件的提交历史及差异 | git log -p <file> |
| 按作者过滤 | git log --author="name" |
| 按时间范围过滤 | git log --since="2024-01-01" |
| 搜索内容变更(某字符串增删) | git log -S"keyword" |
| 文件逐行归属 | git blame <file> |
| 查看某次提交详情 | git show <commit> |
| 比较两次提交差异 | git diff <commit1> <commit2> |
| 查看暂存区与上次提交的差异 | git diff --staged |
八、撤销与回退
| 操作 | 命令 |
|---|---|
| 安全撤销某次提交(新建反向提交) | git revert <commit> |
| 回退到指定提交,保留暂存区和工作区 | git reset --soft <commit> |
| 回退并清空暂存区,保留工作区 | git reset --mixed <commit>(默认) |
| 彻底回退并丢弃所有修改 | git reset --hard <commit> |
| 查看 HEAD 变动记录(找回丢失提交) | git reflog |
| 恢复单个文件到指定版本 | git checkout <commit> -- <file> |
九、暂存(Stash)
| 操作 | 命令 |
|---|---|
| 暂存当前修改 | git stash |
| 暂存并添加说明 | git stash -m "message" |
| 查看暂存列表 | git stash list |
| 恢复最近一次暂存并删除记录 | git stash pop |
| 恢复指定暂存 | git stash pop stash@{n} |
| 删除某次暂存 | git stash drop stash@{n} |
| 清空所有暂存 | git stash clear |
十、标签
| 操作 | 命令 |
|---|---|
| 列出所有标签 | git tag |
| 创建轻量标签(指向当前提交) | git tag <name> |
| 创建附注标签 | git tag -a <name> -m "message" |
| 给历史提交打标签 | git tag -a <name> <commit> |
| 推送所有标签 | git push --tags |
| 推送指定标签 | git push <remote> <tag> |
| 删除本地标签 | git tag -d <name> |
| 删除远程标签 | git push --delete <remote> <tag> |
十一、清理与维护
| 操作 | 命令 |
|---|---|
| 垃圾回收 | git gc |
| 删除不可达对象 | git prune |
| 列出未跟踪文件(预览) | git clean -n |
| 删除未跟踪文件 | git clean -f |
| 删除未跟踪文件和目录 | git clean -fd |
十二、常用组合技巧
| 场景 | 命令 |
|---|---|
| 取消最近一次提交但保留修改 | git reset --soft HEAD~1 |
| 修改最近一次提交的作者 | git commit --amend --author="Name <email>" |
| 将当前分支强制对齐到远程主干 | git reset --hard origin/main |
| 查看两分支的差异文件列表 | git diff --name-only branch1..branch2 |
| 将某个提交应用到当前分支 | git cherry-pick <commit-hash> |
| 连续 cherry-pick 一个范围(不含 A) | git cherry-pick A..B |