git config --global user.name "张三" | 设置用户名 |
git config --global user.email "[email protected]" | 设置邮箱 |
git config --global core.quotepath false | 中文文件名正常显示 |
git config --list --show-origin | 列出所有配置及其来源 |
命令速查
配置与初始化
git init | 初始化当前目录 |
git init -b main my-project | 创建目录并指定初始分支名 |
git init --bare project.git | 创建裸仓库 |
git clone <地址> | 克隆仓库 |
git clone <地址> my-dir | 克隆到指定目录 |
git clone --depth 1 <地址> | 浅克隆,只获取最新提交 |
git clone --recurse-submodules <地址> | 同时克隆子模块 |
git help
查看命令帮助文档
git help <命令> | 打开完整帮助 |
git <命令> -h | 查看简要用法 |
基本操作
git status | 查看详细状态 |
git status -s | 简洁格式 |
git status --ignored | 同时显示被忽略的文件 |
git add <文件> | 暂存指定文件 |
git add . | 暂存当前目录下所有变更 |
git add -u | 只暂存已跟踪文件的修改和删除 |
git add -p | 交互式选择要暂存的代码块 |
git commit -m "说明" | 提交并附上说明 |
git commit -am "说明" | 自动暂存已跟踪文件并提交 |
git commit --amend | 修改最后一次提交 |
git commit --amend --no-edit | 追加修改到上次提交,不改说明 |
git diff | 工作区与暂存区的差异 |
git diff --staged | 暂存区与最新提交的差异 |
git diff main feature | 比较两个分支 |
git diff --stat | 只显示修改统计 |
git rm <文件> | 删除文件 |
git rm --cached <文件> | 停止跟踪但保留本地文件 |
git rm -r --cached <目录> | 停止跟踪整个目录 |
git mv <旧名> <新名> | 重命名文件 |
查看历史
git log --oneline | 单行显示 |
git log --oneline --graph --all | 图形化显示所有分支 |
git log -p -- <文件> | 查看某个文件的修改历史 |
git log --author="张三" | 按作者筛选 |
git log -S "关键字" | 查找增删了某段代码的提交 |
git show | 查看最新提交 |
git show <提交> | 查看指定提交 |
git show <提交>:<文件> | 查看某版本中的文件内容 |
git blame <文件> | 查看每一行的作者 |
git blame -L 10,20 <文件> | 只看指定行范围 |
git shortlog -sn | 按提交数排序统计作者 |
git reflog | 查看引用日志 |
git reset --hard HEAD@{2} | 回到某次操作之前 |
撤销与回退
git restore <文件> | 丢弃工作区的修改 |
git restore --staged <文件> | 取消暂存 |
git restore --source=HEAD~2 <文件> | 把文件恢复到指定版本 |
git reset --soft HEAD~1 | 撤销提交,保留暂存 |
git reset HEAD~1 | 撤销提交和暂存,保留修改 |
git reset --hard HEAD~1 | 彻底回退,丢弃修改 |
git reset --hard origin/main | 与远程分支完全一致 |
git revert <提交> | 撤销指定提交 |
git revert HEAD | 撤销最近一次提交 |
git revert -m 1 <合并提交> | 撤销合并提交 |
git clean -n | 预览将被删除的文件 |
git clean -fd | 删除未跟踪的文件和目录 |
分支与合并
git branch | 列出本地分支 |
git branch -a | 列出所有分支(含远程) |
git branch <名称> | 创建分支 |
git branch -m <新名> | 重命名当前分支 |
git branch -d <名称> | 删除已合并的分支 |
git branch -vv | 查看跟踪关系 |
git switch <分支> | 切换到分支 |
git switch -c <新分支> | 创建并切换 |
git switch - | 切换回上一个分支 |
git checkout <分支> | 切换分支 |
git checkout -b <新分支> | 创建并切换 |
git checkout -- <文件> | 丢弃文件修改 |
git merge <分支> | 合并分支 |
git merge --no-ff <分支> | 禁止快进,保留合并提交 |
git merge --squash <分支> | 压缩为一次修改 |
git merge --abort | 放弃合并 |
git rebase main | 变基到 main |
git rebase -i HEAD~3 | 交互式整理最近 3 个提交 |
git rebase --continue | 解决冲突后继续 |
git rebase --abort | 放弃变基 |
git cherry-pick <提交> | 挑选单个提交 |
git cherry-pick A..B | 挑选一个范围的提交 |
git stash push -m "说明" | 储藏修改 |
git stash -u | 包含未跟踪文件 |
git stash list | 查看储藏列表 |
git stash pop | 恢复并删除最近的储藏 |
git stash drop stash@{0} | 删除指定储藏 |
远程协作
git remote -v | 查看远程仓库地址 |
git remote add origin <地址> | 添加远程仓库 |
git remote set-url origin <地址> | 修改远程地址 |
git remote remove <名称> | 删除远程仓库 |
git fetch | 获取默认远程的更新 |
git fetch --all --prune | 获取所有远程并清理已删除分支 |
git pull | 拉取并合并 |
git pull --rebase | 拉取并变基 |
git push -u origin main | 首次推送并设置上游 |
git push | 推送当前分支 |
git push origin --delete <分支> | 删除远程分支 |
git push --force-with-lease | 安全的强制推送 |
git push origin --tags | 推送所有标签 |
git tag | 列出标签 |
git tag -a v1.0.0 -m "说明" | 创建附注标签 |
git tag -d v1.0.0 | 删除本地标签 |
git push origin --delete v1.0.0 | 删除远程标签 |
git submodule add <地址> <路径> | 添加子模块 |
git submodule update --init --recursive | 初始化并拉取子模块 |
git submodule update --remote | 更新到子模块远程最新版本 |
进阶工具
git bisect start | 开始二分查找 |
git bisect bad / good | 标记当前提交的好坏 |
git bisect run npm test | 自动执行测试查找 |
git bisect reset | 结束查找 |
git worktree add ../hotfix hotfix | 新增一个工作区 |
git worktree list | 列出工作区 |
git worktree remove ../hotfix | 删除工作区 |
git grep -n "TODO" | 搜索并显示行号 |
git grep "关键字" v1.0.0 | 在历史版本中搜索 |
git describe --tags | 如 v1.0.0-5-ga1b2c3d |
git gc | 执行垃圾回收 |
git count-objects -vH | 查看仓库大小 |
git cat-file -t <对象> | 查看对象类型 |
git cat-file -p <对象> | 查看对象内容 |