Git 常用操作命令大全
Git 是一个分布式版本控制系统。中文完整文档:https://git-scm.com/book/zh/v2
目录
1. 配置
# 设置全局用户名和邮箱(提交时必填)
git config --global user.name "你的名字"
git config --global user.email "you@example.com"
# 仅在当前仓库设置(不加 --global)
git config user.name "你的名字"
# 查看配置
git config --list # 查看所有配置
git config --global --list # 查看全局配置
git config user.name # 查看单项配置
# 设置默认文本编辑器(用于写提交信息)
git config --global core.editor "vim"
# 设置默认分支名(新版 Git)
git config --global init.defaultBranch main
2. 创建与克隆
# 在当前目录初始化一个新仓库
git init
# 克隆远程仓库到本地
git clone <仓库地址>
git clone git@github.com:user/repo.git # SSH 方式
git clone https://github.com/user/repo.git # HTTPS 方式
# 克隆到指定目录
git clone <地址> myfolder
# 只克隆某个分支
git clone -b <分支名> <地址>
3. 日常提交
# 查看文件状态(哪些修改了/新增了)
git status
# 添加文件到暂存区
git add <文件名> # 添加单个文件
git add . # 添加当前目录所有改动
git add src/ # 添加某个目录
git add -A # 添加所有改动(含删除)
# 提交暂存区内容到本地仓库
git commit -m "提交说明"
git commit -am "提交说明" # 跳过 git add,直接提交已跟踪文件的修改
# 修改上一次提交(未推送时)
git commit --amend -m "新的提交说明"
# 查看暂存区里具体改了哪些内容
git diff --cached
4. 查看状态与历史
# 查看工作区差异(未暂存的修改)
git diff
# 查看提交历史
git log
git log --oneline # 简洁版(一行一条)
git log --oneline -10 # 只看最近10条
git log --graph --oneline # 图形化显示分支
# 查看某次提交的具体改动
git show <commit_id>
git show --stat <commit_id> # 只显示改动的文件统计
# 查看某个文件的历史
git log -- <文件名>
git log -p -- <文件名> # 带每次改动内容
# 查看某行代码是谁/哪次提交改的
git blame <文件名>
5. 分支管理
# 查看分支
git branch # 本地分支
git branch -a # 所有分支(含远程)
git branch -v # 带最后提交信息
# 创建/切换分支
git branch <新分支名> # 创建分支(不切换)
git checkout <分支名> # 切换到已有分支
git checkout -b <新分支名> # 创建并切换(常用)
git switch <分支名> # 新版切换分支
git switch -c <新分支名> # 新版创建并切换
# 重命名分支(需先切换到该分支)
git branch -m <新名字>
# 删除分支
git branch -d <分支名> # 安全删除(未合并会提示)
git branch -D <分支名> # 强制删除
6. 远程仓库
# 查看远程仓库
git remote -v # 列出远程地址
# 添加远程仓库
git remote add origin <地址>
# 推送本地分支到远程
git push origin <分支名>
git push -u origin <分支名> # 首次推送并建立关联(之后可直接 git push)
git push # 关联后直接推送当前分支
# 拉取远程更新并合并
git pull # 等于 fetch + merge
git pull origin <分支名>
# 拉取远程最新但先不合并
git fetch
# 删除远程分支
git push origin --delete <分支名>
7. 撤销与回退
# 撤销工作区修改(未暂存、未提交)—— 危险,丢失修改
git restore <文件名>
git checkout -- <文件名> # 旧版写法
# 把已暂存的文件移出暂存区(不加 --hard,不丢内容)
git restore --staged <文件名>
git reset <文件名> # 旧版写法
# 撤销最近一次提交(保留修改,回到暂存区)
git reset --soft HEAD~1
# 撤销最近一次提交(保留修改,回到工作区)
git reset HEAD~1 # 或 --mixed
git reset HEAD~1 -- <文件名>
# 彻底回退并丢弃修改(危险!)
git reset --hard HEAD # 回到当前最新提交,丢弃所有未提交改动
git reset --hard <commit_id> # 回退到指定提交,丢弃之后的所有修改
# 用一次新提交推翻之前某次提交(适合已推送的情况)
git revert <commit_id>
# 暂存区/工作区全部清理
git clean -fd # 删除未跟踪的文件和目录(危险)
8. 暂存区(Stash)
把当前未提交的修改临时保存,之后可恢复:
git stash # 暂存当前修改
git stash list # 查看暂存列表
git stash apply # 恢复但不删除暂存记录
git stash pop # 恢复并删除暂存记录
git stash drop stash@{0} # 删除某条暂存
git stash clear # 清空所有暂存
git stash save "说明" # 带备注暂存
9. 合并与变基
# 合并(merge):把某分支合并到当前分支
# 先切换到目标分支,再执行
git checkout main
git merge feature
# 变基(rebase):把当前分支的提交重新放到另一分支基础上
git rebase main # 把当前分支基于 main 重放
# 处理冲突后继续/中止
git add <冲突文件> # 解决冲突后添加
git merge --continue # 继续合并(会打开编辑器确认)
git rebase --continue # 继续变基
git merge --abort # 放弃合并,恢复原状
git rebase --abort # 放弃变基
merge vs rebase:merge 保留完整历史(有分叉记录),rebase 让历史更干净(线性)。团队协作通常用 merge,个人/功能分支常用 rebase。
10. 标签(Tag)
# 打标签(如发布 v1.0)
git tag v1.0 # 简单标签
git tag -a v1.0 -m "说明" # 带注释的标签(推荐)
# 查看标签
git tag
git tag -l "v1.*" # 通配符筛选
# 推送标签到远程
git push origin v1.0
git push --tags # 推送所有标签
# 删除标签
git tag -d v1.0 # 本地删除
git push origin --delete v1.0 # 远程删除
11. 常用高阶技巧
# 查看仓库整体信息 / 图形化历史
gitk --all # GUI 图形化
git log --graph --oneline --all # 终端图形化
# 搜索历史中的关键字(如某次提交删了某功能)
git log -S "关键词" --oneline
git grep "关键词" $(git rev-list --all) # 全历史搜索(慢)
# 找回被删除/误删的提交(还是能找回的)
git reflog # 查看操作日志,找回 commit_id
git reset --hard <commit_id> # 找回后回退
# 一次提交多个文件中的部分内容
git add -p # 交互式选择暂存
# 查看某文件某个历史版本的完整内容
git show <commit_id>:<文件路径>
# 子模块
git submodule add <地址> <目录>
git submodule update --init --recursive
# 生成补丁文件
git diff > changes.patch
git apply changes.patch
# 常用别名(提高效率)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm commit
git config --global alias.lg "log --oneline --graph --all"
# 之后可用 git lg / git co 等
⚠️ 常见陷阱提醒
| 情况 | 正确做法 |
|---|---|
git pull 报冲突 |
先 git stash 暂存本地修改,pull 后再 git stash pop |
| 刚 commit 就想改 | git commit --amend(未推送时) |
| 误提交到 main | git reset --soft HEAD~1 撤销提交但保留改动 |
| 误删了文件还没提交 | git restore -- <文件> 从 HEAD 恢复 |
| 已经 push 了错误提交 | 千万别用 reset,用 git revert 新提交推翻 |
| 不确定哪些改动 | 先 git status + git diff,确认后再 add/commit |
最常用 5 条(足以应对 80% 场景)
git status # 看状态
git add . && git commit -m "说明" # 提交
git push # 推送
git pull # 拉取
git log --oneline # 看历史
整理:Hermes Agent · 供日常参考,详细用法请查阅 Git 官方文档
评论区