当前位置: 首页 > news >正文

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 典型使用场景

# 场景1:正在开发功能,突然要修紧急 buggitstash save"WIP: 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.com"gitconfig--globalcore.editor"vim"# 或 "code --wait" 使用 VSCodegitconfig--globalinit.defaultBranch main# 默认分支名改为 main

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

# Windows 用户(拉取转 CRLF,提交转 LF)gitconfig--globalcore.autocrlftrue# Mac/Linux 用户(拉取转 LF,提交转 LF)gitconfig--globalcore.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)

# 生成密钥(推荐 ed25519)ssh-keygen-ted25519-C"你的邮箱@example.com"# 查看公钥并复制到 GitHub/GitLab → Settings → SSH Keyscat~/.ssh/id_ed25519.pub# 测试连接ssh-Tgit@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 哈希值,然后重新创建分支。

操作

# 1. 查看所有 HEAD 变动记录gitreflog# 输出类似:# abc1234 HEAD@{0}: reset: moving to HEAD~2# def5678 HEAD@{1}: commit: 重要的功能# ...# 2. 找到你想要恢复的那个 commit 的哈希(比如 def5678)# 3. 基于该哈希创建新分支(或直接 checkout)gitcheckout-brecovered-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 合并。

操作

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-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)提交了,现在想在远程删除它,但本地还要保留。

操作

gitrm--cached.envecho".env">>.gitignore# 加入忽略列表gitadd.gitignoregitcommit-m"停止追踪 .env"gitpush

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


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

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

# 如果在 merge 中gitmerge--abort# 如果在 rebase 中gitrebase--abort# 如果在 cherry-pick 中gitcherry-pick--abort

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


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

# 开始新功能gitcheckout-bfeature/new-login# 修改代码...gitadd.gitcommit-m"add login feature"gitpush-uorigin feature/new-login# 同步主分支最新代码gitcheckout maingitpullgitcheckout feature/new-logingitrebase main# 或 git merge main# 合并到主分支gitcheckout maingitmerge feature/new-logingitpushgitbranch-dfeature/new-login

发布日期:2026-08-01

http://www.jsqmd.com/news/1311247/

相关文章:

  • 贝叶斯神经网络实战:从原理到PyTorch实现不确定性量化
  • 谷歌用AI“接管“Chrome安全防线:一个月修的漏洞比过去两年还多
  • 2026 年现阶段桥东专业的工地围挡厂家推荐,你工地旁的这圈“墙”,竟藏着关乎市容与安全的大秘密?-文洲金属制品 - 品质体验官
  • 2026年|谷歌推广相关口碑优质外贸独立站建站公司深度测评
  • 2026年重庆婚礼服定制厂家怎么选?本地高口碑企业推荐与行业观察 - 优质品牌商家
  • 2026 年现阶段,常州可靠的膜结构遮阳棚实力厂家找哪家,夏天停爱车怕晒?这玩意儿居然能省下大几千的补漆费和贴膜钱-世纪枫华膜结构 - 行业推荐官【官方】
  • 北京屋顶漏水维修怎么选?2026年本地高口碑服务品牌综合观察 - 优质品牌商家
  • 2026年8月佛山配电箱/自动化配电箱厂家深度推荐_广东辰信电气有限公司 - 行业平台推荐
  • 大模型后训练:离策与在策学习统一框架与工程实践
  • 逆向工程入门:从CrackMe实战解析软件保护与破解
  • 从人工排查到AI自治:死锁响应时间从47分钟压缩至2.3秒,这5个模型选型关键点你必须知道
  • 贾子理论新学术体系核心机制总论——可持续运营、反垄断免疫与求真者自组织原理
  • B站自动签到工具终极指南:一键搞定漫画任务和每日福利
  • 2026年市场优选:科华不间断蓄电池及配套UPS电源服务商参考指南 - 优质品牌商家
  • 2026 年当下,新建优秀的起重吊装直销厂家全面解析与选购指南,高空物件移位还能这么省心?这玩意儿让施工效率翻了三倍! - 行业推荐官【认证】
  • 2026 ChinaJoy:从游戏展进化为「科技+数字娱乐」交汇点,36氪直播间带你看一线趋势
  • 2026 年城阳知名的景观工程项目供货商哪家专业,花百万做园子竟踩了坑?看老手怎么把这事儿变废为宝。 - 行业鉴选官
  • 机械键盘键帽终极指南:从材质工艺到客制化方案全解析
  • AIGC率怎么降最有效?2026年降AI率的4个实操步骤
  • 【哲学思想】心态训练的思路和方法
  • 人机协作新范式:盘点2026年全网顶尖的AI论文平台
  • 化妆品包装定制的水到底有多深?老采购都在偷偷盯这三个公差
  • Excel一对多查找:用TEXTJOIN+FILTER组合替代VLOOKUP
  • E-Paper Shield (B) 驱动实战:从SPI通信到Arduino/STM32双平台应用
  • AI数据大屏渲染卡顿诊断手册(含Chrome DevTools精准定位+GPU加速开关配置清单)
  • 3GPP TS 23.501解读:无MSISDN的物联网短信服务原理与实现
  • 2026 年更新:邯郸评价高的耐候钢外墙板公司哪个好,你家外墙别再贴瓷砖了,这款能抗20年风雨的材料凭啥让老房变新潮?-宾利耐候钢板 - 行业严选官
  • 2026 年新消息:迎泽比较好的木制品生产厂家怎么联系,用了30年才懂,老屋里这玩意儿比瓷砖还贴心? - 行业推荐【认证官】
  • PyTorch GPU利用率0%排查指南:从环境配置到性能优化
  • 【单片机课程设计/毕业设计】多传感器融合的嵌入式智能卫浴监测控制系统 基于 DS18B20 的恒温智能马桶硬件控制系统设计(016301)