一、配置操作(Config)
| 操作 | 命令 |
|---|---|
| 全局配置用户名/邮箱 | git config --global user.name "你的名字" git config --global user.email "your@email.com" |
| 当前仓库配置 | git config --local user.name "名字" git config --local user.email "邮箱" |
| 查看全局配置 | git config --global --list |
| 查看当前仓库配置 | git config --local --list |
| 删除全局配置项 | git config --global --unset 配置项名 例:git config --global --unset user.name |
| 删除本地仓库配置项 | git config --local --unset 配置项名 |
💡 配置优先级:local > global > system
二、本地操作(Working Directory & Staging Area)
| 操作 | 命令 |
|---|---|
| 查看变更状态 | git status |
| 添加所有变更(包括新文件、修改、删除) | git add -A 或 git add .(⚠️ . 不包含 .gitignore 外的删除) |
| 添加指定文件 | git add file1 file2 |
| 比较工作区 vs 暂存区 | git diff |
| 比较某文件工作区 vs 暂存区 | git diff 文件名 |
| 比较暂存区 vs HEAD | git diff --cached(或 --staged) |
| 比较某文件暂存区 vs HEAD | git diff --cached 文件名 |
| 比较工作区 vs HEAD | git diff HEAD 文件名 |
| 创建提交 | git commit -m "提交信息" |
| 撤销工作区修改(恢复为暂存区版本) | git checkout -- 文件名(⚠️ 新版推荐 git restore 文件名) |
| 撤销暂存区(恢复为 HEAD 版本) | git reset HEAD 文件名 |
| 彻底重置工作区和暂存区为 HEAD | git reset --hard(⚠️ 危险!会丢失未提交更改) |
| 可视化比较两个提交 | git difftool <commit1> <commit2>(需配置 difftool) |
| 查看未被追踪的文件 | git ls-files --others --exclude-standard |
| 临时保存工作进度 | git stash |
| 恢复最近一次 stash(并删除) | git stash pop |
| 恢复 stash(保留记录) | git stash apply |
| 查看所有 stash | git stash list |
| 恢复指定 stash | git stash pop stash@{n}(n 从 0 开始) |
| 修改最后一次提交(含新增文件) | bash<br>git add .<br>git commit --amend --no-edit<br> |
🔧 注意:
git checkout 文件在新版 Git 中已被git restore替代(更语义化)git add .和git add -A在根目录下效果相同;但在子目录中,.不会跟踪父目录的删除
三、分支操作(Branch)
| 操作 | 命令 |
|---|---|
| 查看本地分支(含最新 commit) | git branch -v |
| 查看所有分支(本地+远程) | git branch -av |
| 仅查看远程分支 | git branch -rv |
| 切换分支 | git checkout 分支名(或 git switch 分支名) |
| 创建新分支(基于当前 HEAD) | git branch 新分支名 |
| 基于指定分支创建 | git branch 新分支 指定分支 |
| 基于某个 commit 创建 | git branch 新分支 <commit-id> |
| 创建并切换 | git checkout -b 新分支(或 git switch -c 新分支) |
| 安全删除已合并分支 | git branch -d 分支名 |
| 强制删除(未合并也可删) | git branch -D 分支名 |
| 删除已合并到 master 的本地分支 | `bash git branch --merged master |
| 清理已不存在的远程分支引用 | git remote prune origin(⚠️ 你原文写成了 orign,已修正) |
| 合并 A 到当前分支 | git merge A分支 |
| 合并 A 到 B(需先切到 B) | ❌ git merge A B 语法错误! ✅ 正确做法: bash<br>git checkout B分支<br>git merge A分支<br> |
| 将当前分支 rebase 到 B | git rebase B分支 |
| 将 A 分支 rebase 到 B | git rebase B分支 A分支(执行后 A 分支指针更新) |
⚠️ 重要修正 :
git merge A B是非法命令!Git 的merge只能将其他分支合并到当前分支。
四、变更历史(Log & Blame)
| 操作 | 命令 |
|---|---|
| 单行显示 commit | git log --oneline |
| 显示最近 n 条记录 | git log -n(如 git log -5) |
| 图形化显示所有分支历史 | git log --oneline --graph --all |
| 查看某文件的提交历史 | git log 文件名 |
| 查看每行最后修改者 | git blame 文件名 |
五、标签操作(Tag)
| 操作 | 命令 |
|---|---|
| 列出所有标签 | git tag |
| 创建轻量标签 | git tag v1.0 |
| 创建带注释标签 | git tag -a v1.0 -m "发布 v1.0" |
| 给指定 commit 打标签 | git tag v1.0 <commit-id> |
| 推送单个标签 | git push origin v1.0 |
| 推送所有未推送标签 | git push origin --tags |
| 删除本地标签 | git tag -d v1.0 |
| 删除远程标签 | git push origin :refs/tags/v1.0 或(新版)git push origin --delete v1.0 |
六、远程仓库交互(Remote)
| 操作 | 命令 |
|---|---|
| 查看远程仓库 | git remote -v |
| 添加远程仓库 | git remote add <名称> <URL> 例:git remote add origin https://... |
| 删除远程仓库配置 | git remote remove <名称> |
| 重命名远程仓库 | git remote rename 旧名 新名 |
| 获取远程所有更新(不合并) | git fetch origin |
| 拉取并自动合并 | git pull origin 分支名(= fetch + merge) |
| 推送本地分支 | git push origin 分支名 |
| 删除远程分支 | bash<br>git push origin --delete 分支名<br># 或<br>git push origin :分支名<br> |
✅ 补充建议
1. 现代 Git 推荐命令
- 用
git switch替代git checkout(切换分支) - 用
git restore替代git checkout -- file(撤销文件修改)
2. 安全提示
git reset --hard会永久丢失未提交代码!git push --force会覆盖远程历史,慎用!可用--force-with-lease更安全
3. 常用组合技巧
# 查看某次提交改了哪些文件
git show --name-only <commit>
# 撤销某次提交(生成反向提交)
git revert <commit>
# 临时忽略某文件(不提交 .env 等)
echo ".env" >> .gitignore