Git 常用命令完整手册

摘要 :本文是一份全面的 Git 命令速查手册,旨在帮助开发者快速掌握日常开发、团队协作与版本控制中的核心操作。内容涵盖从基础操作 (初始化、提交、状态查看)、分支管理 (创建、切换、合并)、远程协作 (推送、拉取、克隆)到高级技巧(撤销修改、临时暂存、配置优化)的全流程指南。特别提供了**"救命技巧"**章节,详细讲解如何恢复误删分支、安全强制推送、修改历史提交等危急场景下的解决方案。无论你是 Git 新手还是希望深化理解的进阶用户,这份手册都能作为随时查阅的实用参考。

一、基础操作(日常必备)

命令 说明
git init 在当前目录初始化一个新的 Git 仓库
git clone <url> 克隆远程仓库到本地
git status 查看当前工作区和暂存区的状态(最常用)
git add <file> 将文件添加到暂存区(git add . 添加所有变更)
git commit -m "message" 提交暂存区内容到本地仓库
git commit -am "message" 跳过 add,直接提交所有已跟踪文件的修改(不包含新文件)
git log 查看提交历史(--oneline 精简显示,--graph 图形化)
git diff 查看工作区与暂存区的差异
git diff --staged 查看暂存区与上一次提交的差异

二、分支管理

命令 说明
git branch 列出本地分支(-r 远程分支,-a 所有分支)
git branch <name> 创建新分支
git checkout <name> 切换到指定分支
git switch <name> Git 2.23+ 推荐的新切换命令
git checkout -b <name> 创建并切换到新分支
git switch -c <name> 同上(新版写法)
git merge <branch> 将指定分支合并到当前分支
git rebase <branch> 将当前分支变基到指定分支(保持线性历史)
git branch -d <name> 删除分支(-D 强制删除未合并分支)
git branch -m <old> <new> 重命名分支

三、远程协作

命令 说明
git remote -v 查看远程仓库地址
git remote add origin <url> 添加远程仓库
git push origin <branch> 推送本地分支到远程
git push -u origin <branch> 首次推送并建立追踪关系
git pull 拉取远程并合并(等同于 fetch + merge
git fetch 只拉取远程更新,不自动合并
git clone --depth 1 浅克隆(只拉取最新提交,节省时间)

四、撤销与修复(工作区 / 暂存区 / 本地提交)

命令 说明
git reset HEAD <file> 撤销 git add(文件从暂存区移除,工作区不变)
git reset --soft HEAD~1 撤销上一次提交,保留修改在暂存区
git reset --mixed HEAD~1 撤销提交并取消暂存(默认行为)
git reset --hard HEAD~1 彻底回退到上一个提交,丢弃所有修改(危险
git revert HEAD 用新提交反向撤销上一次提交(安全,适合已推送)
git checkout -- <file> 丢弃工作区的修改(不可恢复
git restore <file> Git 2.23+ 替代 checkout -- 的推荐命令
git restore --staged <file> 撤销 add(替代 reset HEAD

五、临时暂存(git stash)------ 详细用法

当您正在工作区修改代码,但需要紧急切换分支、拉取更新或解决冲突时,stash 可以临时保存当前进度,让工作区恢复干净。

5.1 基本暂存与恢复

命令 说明
git stash 暂存当前所有未提交的修改(包括工作区和暂存区),工作区恢复到上一次提交的状态
git stash save "描述信息" 同上,并添加注释,方便在列表中识别
git stash list 查看所有暂存记录,显示 stash@{0}stash@{1} ...(最近的在前)
git stash pop 恢复最近一次暂存(stash@{0})并删除该条记录
git stash pop stash@{1} 恢复指定暂存并删除该条记录
git stash apply 恢复最近一次暂存,但保留该条记录(不删除)
git stash apply stash@{1} 恢复指定暂存,保留记录

5.2 查看与删除暂存

命令 说明
git stash show 查看最近一次暂存中修改的文件摘要
git stash show -p stash@{0} 查看指定暂存的详细差异(补丁格式)
git stash drop stash@{1} 删除指定的暂存记录(不恢复)
git stash clear 清空所有暂存记录(危险,不可恢复)

5.3 高级用法:暂存冲突时新建分支

命令 说明
git stash branch <新分支名> 将暂存的内容新建一个分支,并自动恢复修改(常用于暂存与当前分支有冲突时)

5.4 典型使用场景

bash 复制代码
# 场景1:正在开发功能,突然要修紧急 bug
git stash save "WIP: login feature"   # 保存当前进度
git checkout main
git pull
git checkout -b hotfix/bug-123
# 修复并提交...
git checkout feature/login
git stash pop   # 恢复之前的修改,继续开发

# 场景2:不小心 stash 了太多,想查看某个旧暂存的内容
git stash list
git stash show -p stash@{2}

# 场景3:暂存后忘记恢复,后来想丢弃某个旧暂存
git stash drop stash@{1}

六、查看与调试(日志、对比、责任追溯)

命令 说明
git log --oneline --graph 查看提交树(简洁图形化)
git reflog 查看所有 HEAD 变更历史(包括被重置、删除的 commit,用于恢复)
git show <commit> 查看某次提交的详细信息
git blame <file> 查看文件每一行是谁修改的
git diff <commit1> <commit2> 比较两次提交的差异

七、配置与初始化(从零搭建 + 个性化设置)

7.1 仓库初始化

命令 说明
git init 在当前目录初始化空仓库
git init <项目名> 创建指定文件夹并初始化仓库
git init --bare 创建裸仓库(用于远程中心服务器,没有工作区)
git clone <url> 克隆远程仓库(含完整历史)
git clone --depth 1 <url> 浅克隆(只拉最近一次提交,节省时间和空间)
git clone --branch <分支名> <url> 克隆后直接切换到指定分支

7.2 配置三级作用域(优先级:local > global > system)

级别 命令参数 存储位置 作用范围
仓库级(最高) --local(默认) .git/config 仅当前项目
用户级(推荐) --global ~/.gitconfig 当前操作系统用户
系统级(最低) --system /etc/gitconfig 整台机器所有用户

7.3 新电脑必配项

bash 复制代码
git config --global user.name "你的姓名"
git config --global user.email "你的邮箱@example.com"
git config --global core.editor "vim"          # 或 "code --wait" 使用 VSCode
git config --global init.defaultBranch main    # 默认分支名改为 main

7.4 跨平台换行符处理(防乱码)

bash 复制代码
# Windows 用户(拉取转 CRLF,提交转 LF)
git config --global core.autocrlf true
# Mac/Linux 用户(拉取转 LF,提交转 LF)
git config --global core.autocrlf input

7.5 常用进阶配置

配置命令 作用
git config --global color.ui auto 开启彩色输出(更易读)
git config --global core.quotepath false 正确显示中文文件名
git config --global push.default simple 只推送当前分支(Git 2.0+ 默认)
git config --global merge.tool vimdiff 设置合并冲突的可视化对比工具
git config --global credential.helper cache 缓存密码 15 分钟(安全)
git config --global credential.helper store 永久记住密码(明文存储,慎用)
git config --global http.proxy http://127.0.0.1:7890 设置 HTTP 代理(需翻墙时)
git config --global --unset http.proxy 取消代理

7.6 SSH 密钥配置(免密连接 GitHub/GitLab)

bash 复制代码
# 生成密钥(推荐 ed25519)
ssh-keygen -t ed25519 -C "你的邮箱@example.com"
# 查看公钥并复制到 GitHub/GitLab → Settings → SSH Keys
cat ~/.ssh/id_ed25519.pub
# 测试连接
ssh -T git@github.com   # 看到成功信息即可

7.7 忽略文件(.gitignore)

操作 说明
项目根目录创建 .gitignore 忽略特定文件(如 node_modules/*.log
git config --global core.excludesfile ~/.gitignore_global 设置全局忽略文件(如 .DS_Store
git check-ignore -v <文件> 查看该文件被哪条忽略规则匹配

7.8 查看所有配置

命令 说明
git config --list 查看当前仓库生效的所有配置(合并三级)
git config --list --global 查看用户级配置
git config --show-origin <key> 查看某个配置项来自哪个文件

八、救命技巧(真正的急救措施)------ 详细说明

本章只列出那些在危机关头(误删、误操作、历史混乱)能救命的高级操作,每个都附带场景和详细示例。


8.1 恢复误删的分支或丢失的提交 ------ git reflog

场景 :你不小心用 git branch -D 删除了一个还没合并的分支,或者执行了 git reset --hard 丢掉了某些提交。

原理 :Git 会在本地记录所有 HEAD 的变动历史(包括切换、重置、合并等),通过 reflog 可以找到被删除的 commit 哈希值,然后重新创建分支。

操作

bash 复制代码
# 1. 查看所有 HEAD 变动记录
git reflog
# 输出类似:
# abc1234 HEAD@{0}: reset: moving to HEAD~2
# def5678 HEAD@{1}: commit: 重要的功能
# ...

# 2. 找到你想要恢复的那个 commit 的哈希(比如 def5678)
# 3. 基于该哈希创建新分支(或直接 checkout)
git checkout -b recovered-branch def5678
# 现在你的分支就回来了,所有提交都完好无损。

注意reflog 只存在于本地,且有时效性(默认 90 天),若已执行 git gc 或仓库被清理,可能无法恢复。


8.2 安全地强制推送 ------ git push --force-with-lease

场景 :你修改了历史(如 rebaseamendreset),需要强制推送到远程,但又担心覆盖了同事刚刚推送的新提交。

区别

  • git push -f(或 --force)会直接覆盖远程分支,不管远程有没有新提交,危险
  • git push --force-with-lease 会检查远程分支是否和你本地记录的远程引用一致(即你上次 fetch/pull 之后,远程有没有被别人更新)。如果有新提交,则推送失败,提醒你先 pull 合并。

操作

bash 复制代码
git push --force-with-lease origin my-branch

如果远程有新的提交,会报错并提示,此时你应该先 git fetch 然后合并或变基,再重新推送。这个命令是强制推送的安全替代品。


8.3 修改历史提交(合并、重排序、修改消息)------ git rebase -i

场景:你提交了多个 commit,但想将它们合并成一个(squash),或者调整顺序,或者修改某个旧 commit 的消息。

操作

bash 复制代码
# 对最近的 3 个提交进行交互式变基
git rebase -i HEAD~3

编辑器会打开一个文件,列出最近 3 个 commit,每行前面有命令(pick)。你可以修改命令:

  • pick → 保持该提交
  • reword → 修改提交消息
  • edit → 修改提交内容
  • squash → 合并到前一个提交
  • drop → 删除该提交

示例:将最近 3 个 commit 合并为 1 个:

复制代码
pick a1b2c3 第一次提交
squash d4e5f6 第二次提交
squash g7h8i9 第三次提交

保存后,Git 会合并并让你编辑最终提交消息。

警告:不要对已经推送到远程的分支执行此操作,除非你准备强制推送,且团队中只有你一人使用该分支。


8.4 只拿某一次提交 ------ git cherry-pick

场景:你只需要从另一个分支中提取某个特定的 commit,而不是整个分支合并。

操作

bash 复制代码
git cherry-pick <commit-hash>

Git 会将该提交的更改应用到当前分支,生成一个新的 commit(哈希值不同,但内容相同)。如果发生冲突,解决后执行 git cherry-pick --continue

示例 :修复了一个通用 bug 的 commit 在 dev 分支,但 main 分支也需要这个修复,就可以用 cherry-pick 单独拿过来。


8.5 修改最近一次提交 ------ git commit --amend

场景:你刚提交完,发现漏了一个文件,或者提交消息写错了,想在不新增 commit 的情况下修正。

操作

  • 修改消息:git commit --amend -m "新的消息"
  • 补充文件:先 git add 漏掉的文件,然后 git commit --amend --no-edit(不改消息只补充内容)

注意 :如果已经 push,修改后需要 git push --force-with-lease(参考 8.2)。


8.6 停止追踪某个文件但保留在本地 ------ git rm --cached

场景 :你误把本地配置文件(如 .env)提交了,现在想在远程删除它,但本地还要保留。

操作

bash 复制代码
git rm --cached .env
echo ".env" >> .gitignore   # 加入忽略列表
git add .gitignore
git commit -m "停止追踪 .env"
git push

这样远程仓库中该文件被删除,但本地文件依然存在,且以后不再被追踪。


8.7 合并冲突后,放弃所有修改回到干净状态

场景:合并或变基时产生大量冲突,你想放弃这次操作,回到操作前的干净状态。

bash 复制代码
# 如果在 merge 中
git merge --abort

# 如果在 rebase 中
git rebase --abort

# 如果在 cherry-pick 中
git cherry-pick --abort

以上救命技巧都是日常开发中保护代码安全、修复误操作的利器,熟记它们能让你在紧急情况下从容应对。如果需要更深入的解释(比如交互式变基的具体使用案例),可以随时问我。


附录:常用工作流示例(供参考)

bash 复制代码
# 开始新功能
git checkout -b feature/new-login
# 修改代码...
git add .
git commit -m "add login feature"
git push -u origin feature/new-login

# 同步主分支最新代码
git checkout main
git pull
git checkout feature/new-login
git rebase main   # 或 git merge main

# 合并到主分支
git checkout main
git merge feature/new-login
git push
git branch -d feature/new-login

发布日期:2026-08-01

相关推荐
tianyuanwo2 小时前
当提交标题重复阻塞CI:Git分支修复实战
git·ci/cd·分支基线调整
Salt & Light3 小时前
Git 分支操作与恢复完整记录
git
重生的黑客3 小时前
从远程仓库到企业级协作:Git push、pull、PR、多人开发与分支模型
git·分支·多人协作
gwf21621 小时前
SSD读写速度深度解析:顺序读写vs随机读写、IOPS、延迟,你的硬盘性能到底怎么看?
git·嵌入式硬件·缓存·github·智能硬件
西邮彭于晏21 小时前
图文详解:Git分支创建、合并与冲突解决|新手零门槛完整教程
大数据·git·elasticsearch
nuisthou1 天前
git常用命令总结
git
西邮彭于晏1 天前
Git 标签(Tag)与版本发布完整指南|附全场景命令速查表
大数据·git·elasticsearch
潘正翔1 天前
k8s进阶_Harbor镜像仓库
git·云原生·容器·kubernetes·gitee·github
InfinitePlus1 天前
Git基本操作-命令行
git