Git 常用命令完整手册

发布时间:2026/8/2 4:33:38
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 nameGit 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 mergegit 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 fileGit 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 典型使用场景# 场景1正在开发功能突然要修紧急 buggitstash saveWIP: login feature# 保存当前进度gitcheckout maingitpullgitcheckout-bhotfix/bug-123# 修复并提交...gitcheckout feature/logingitstash pop# 恢复之前的修改继续开发# 场景2不小心 stash 了太多想查看某个旧暂存的内容gitstash listgitstash show-pstash{2}# 场景3暂存后忘记恢复后来想丢弃某个旧暂存gitstash 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 新电脑必配项gitconfig--globaluser.name你的姓名gitconfig--globaluser.email你的邮箱example.comgitconfig--globalcore.editorvim# 或 code --wait 使用 VSCodegitconfig--globalinit.defaultBranch main# 默认分支名改为 main7.4 跨平台换行符处理防乱码# Windows 用户拉取转 CRLF提交转 LFgitconfig--globalcore.autocrlftrue# Mac/Linux 用户拉取转 LF提交转 LFgitconfig--globalcore.autocrlf input7.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# 生成密钥推荐 ed25519ssh-keygen-ted25519-C你的邮箱example.com# 查看公钥并复制到 GitHub/GitLab → Settings → SSH Keyscat~/.ssh/id_ed25519.pub# 测试连接ssh-Tgitgithub.com# 看到成功信息即可7.7 忽略文件.gitignore操作说明项目根目录创建.gitignore忽略特定文件如node_modules/、*.loggit config --global core.excludesfile ~/.gitignore_global设置全局忽略文件如.DS_Storegit 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 哈希值然后重新创建分支。操作# 1. 查看所有 HEAD 变动记录gitreflog# 输出类似# abc1234 HEAD{0}: reset: moving to HEAD~2# def5678 HEAD{1}: commit: 重要的功能# ...# 2. 找到你想要恢复的那个 commit 的哈希比如 def5678# 3. 基于该哈希创建新分支或直接 checkoutgitcheckout-brecovered-branch def5678# 现在你的分支就回来了所有提交都完好无损。注意reflog只存在于本地且有时效性默认 90 天若已执行git gc或仓库被清理可能无法恢复。8.2 安全地强制推送 ——git push --force-with-lease场景你修改了历史如rebase、amend、reset需要强制推送到远程但又担心覆盖了同事刚刚推送的新提交。区别git push -f或--force会直接覆盖远程分支不管远程有没有新提交危险。git push --force-with-lease会检查远程分支是否和你本地记录的远程引用一致即你上次 fetch/pull 之后远程有没有被别人更新。如果有新提交则推送失败提醒你先 pull 合并。操作gitpush --force-with-lease origin my-branch如果远程有新的提交会报错并提示此时你应该先git fetch然后合并或变基再重新推送。这个命令是强制推送的安全替代品。8.3 修改历史提交合并、重排序、修改消息——git rebase -i场景你提交了多个 commit但想将它们合并成一个squash或者调整顺序或者修改某个旧 commit 的消息。操作# 对最近的 3 个提交进行交互式变基gitrebase-iHEAD~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而不是整个分支合并。操作gitcherry-pickcommit-hashGit 会将该提交的更改应用到当前分支生成一个新的 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提交了现在想在远程删除它但本地还要保留。操作gitrm--cached.envecho.env.gitignore# 加入忽略列表gitadd.gitignoregitcommit-m停止追踪 .envgitpush这样远程仓库中该文件被删除但本地文件依然存在且以后不再被追踪。8.7 合并冲突后放弃所有修改回到干净状态场景合并或变基时产生大量冲突你想放弃这次操作回到操作前的干净状态。# 如果在 merge 中gitmerge--abort# 如果在 rebase 中gitrebase--abort# 如果在 cherry-pick 中gitcherry-pick--abort以上救命技巧都是日常开发中保护代码安全、修复误操作的利器熟记它们能让你在紧急情况下从容应对。如果需要更深入的解释比如交互式变基的具体使用案例可以随时问我。附录常用工作流示例供参考# 开始新功能gitcheckout-bfeature/new-login# 修改代码...gitadd.gitcommit-madd login featuregitpush-uorigin feature/new-login# 同步主分支最新代码gitcheckout maingitpullgitcheckout feature/new-logingitrebase main# 或 git merge main# 合并到主分支gitcheckout maingitmerge feature/new-logingitpushgitbranch-dfeature/new-login发布日期2026-08-01

相关新闻