尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Git误操作急救手册(新手必看,避坑指南)

Git误操作急救手册(新手必看,避坑指南) 作为开发人员Git是日常协作和版本控制的必备工具但哪怕是老司机也难免会出现误操作——误删文件、提交错分支、写错提交信息、误合并分支、甚至不小心push了敏感信息……每次误操作都让人头皮发麻生怕丢了代码、乱了版本。这篇手册整理了最常见的Git误操作场景每一种都附上「急救命令详细步骤注意事项」全程实操性拉满新手可以直接复制命令使用老司机也能当作速查手册再也不用慌慌张张找解决方案啦一、基础误操作本地文件/修改误删、误提交场景1误删本地文件未git add现象不小心删除了本地工作区的文件比如用rm命令、手动删除还没执行git add文件找不到了但Git仓库里有记录。急救命令gitcheckout -- 文件名操作说明这个命令会将文件从暂存区如果有或本地仓库如果暂存区没有恢复到工作区仅适用于未执行git add的情况。如果删除的是多个文件可以用git checkout – . 恢复当前目录下所有误删文件注意末尾的点不要漏。注意如果文件已经git add这个命令无效需看场景2。场景2误删本地文件已git add未git commit现象删除文件后已经执行了git add暂存区有该文件的删除记录工作区文件丢失。急救步骤分两步# 第一步取消暂存区的删除记录将文件状态恢复为未add状态gitreset HEAD 文件名# 第二步恢复文件到工作区gitcheckout -- 文件名注意reset HEAD 会将暂存区的修改撤销回归到最近一次commit的状态不会影响工作区除了暂存区的内容。场景3写错提交信息已git commit未git push现象执行git commit后发现提交信息写错了比如拼写错误、描述不清晰还没推送到远程仓库。急救命令gitcommit--amend操作说明执行命令后会进入默认编辑器通常是vim修改提交信息后保存退出即可。这个命令会覆盖最近一次的commit记录不会新增一个commit适合修改刚提交的错误信息。注意如果已经git push绝对不能用这个命令会导致本地和远程版本不一致需看场景10。场景4误提交多余文件已git commit未git push现象commit时不小心把不需要提交的文件比如日志文件、缓存文件、本地配置文件一起提交了还没push到远程。急救步骤# 1. 取消最近一次commit将修改放回暂存区不删除工作区文件gitreset--softHEAD~1# 2. 取消暂存区中不需要提交的文件保留工作区文件gitreset HEAD 多余的文件名# 3. 重新提交正确的文件gitcommit-m正确的提交信息关键说明–soft 参数是核心它只会撤销commit暂存区和工作区的内容都不变如果用–hard会同时删除暂存区和工作区的修改慎用场景4.1误git add未commit想取消暂存现象不小心将不需要提交的文件比如本地缓存、临时文件执行了git add暂存区有该文件的记录但还未执行git commit想取消暂存保留工作区文件。急救命令gitreset HEAD 文件名操作说明该命令仅取消指定文件的暂存状态将文件从暂存区回归到工作区不会删除工作区的任何文件也不会影响其他已暂存或未暂存的文件。补充细节如果想取消当前目录下所有已git add的文件全部取消暂存可执行命令git reset HEAD .注意末尾的点若误add后还对文件做了修改取消暂存后修改仍会保留在工作区无需担心丢失。注意此命令仅适用于未执行git commit的情况若已commit需参考场景4的急救步骤与场景4的核心区别的是此场景仅误add未commit无需撤销commit操作更简洁适合新手快速处理。二、分支相关误操作切错分支、误合并、误删除分支场景5在错误的分支上开发未commit现象忘记切换分支在master/dev分支上写了代码还没执行git commit想把代码转移到正确的分支比如feature分支。急救步骤# 1. 保存当前工作区的修改暂存起来避免切换分支时丢失gitstash# 2. 切换到正确的分支gitcheckout 正确的分支名# 3. 将保存的修改恢复到当前分支gitstash pop补充说明git stash 会将当前工作区和暂存区的修改“暂存”到一个临时区域切换分支后再用pop恢复完美转移代码不会留下痕迹。如果想查看暂存的记录用git stash list。场景6在错误的分支上开发已git commit未push现象在错误分支比如master上commit了代码还没push想把这个commit转移到正确的分支。急救步骤# 1. 切换到正确的分支将错误分支的最近一次commit应用到当前分支gitcheckout 正确的分支名gitcherry-pick 错误分支的commit_id# 2. 切换回错误分支撤销最近一次commit不删除代码仅撤销commit记录gitcheckout 错误分支名gitreset--softHEAD~1# 3. 可选如果错误分支上没有其他需要保留的修改可删除多余文件若有gitreset HEAD 多余文件如有关键说明commit_id 可通过git log查看取最近一次commit的哈希值前6位即可cherry-pick 仅复制指定commit到当前分支不影响原错误分支的commit记录后续撤销错误分支的commit不会影响已转移的代码。场景7误合并分支已合并未commit现象不小心将错误的分支比如test分支合并到了当前开发分支还没执行git commit想撤销合并。急救命令gitmerge--abort操作说明这个命令会彻底撤销本次合并操作将工作区和暂存区恢复到合并前的状态仅适用于未commit的合并。如果已经commit需看场景8。场景8误合并分支已commit未push现象合并错误分支后已经执行了git commit还没push到远程想撤销合并。急救命令gitreset--hardHEAD~1注意–hard 参数会彻底删除最近一次commit合并的commit同时恢复工作区和暂存区到合并前的状态。**慎用**如果合并后有自己的代码修改会一起被删除建议先备份代码或用–soft 撤销后手动整理。场景9误删除本地分支分支有未push的commit现象不小心用git branch -D 删了本地分支而这个分支上有未push到远程的commit想恢复分支。急救步骤# 1. 查看最近的操作记录找到被删除分支的最后一个commit_idgitreflog# 2. 基于这个commit_id重新创建分支分支名可和原来一致gitcheckout-b被删除的分支名 commit_id关键说明git reflog 会记录所有Git操作历史包括删除分支、reset、merge等哪怕分支被删除也能通过该命令找到对应commit_idcheckout -b 会基于指定commit_id重新创建分支并切换完美恢复被删除的本地分支内容且不影响其他分支。场景9.1误删除远程分支已push想恢复现象不小心用git push origin --delete 分支名删除了远程仓库的分支已完成push删除本地仍有该分支或有该分支的历史commit想恢复远程分支。急救步骤分2种情况按需选择均安全无风险情况1本地仍保留该分支最便捷# 1. 切换到本地保留的该分支确保分支内容完整gitcheckout 被删除的远程分支名# 2. 将本地分支重新推送到远程恢复远程分支gitpush origin 被删除的远程分支名情况2本地已删除该分支但有该分支的历史commit或通过reflog找到记录# 1. 查看操作历史找到被删除远程分支的最后一个commit_id或本地曾有的该分支记录gitreflog# 2. 基于commit_id本地重新创建该分支gitcheckout-b被删除的远程分支名 commit_id# 3. 将本地重新创建的分支推送到远程恢复远程分支gitpush origin 被删除的远程分支名操作说明两种方法均不会影响远程其他分支也不会修改任何历史记录仅重新创建并推送分支适合多人协作场景下的远程分支恢复。补充细节如果本地无任何该分支的记录可通过远程仓库平台GitHub/Gitee恢复通常在分支列表的“已删除分支”中可找到点击恢复即可恢复后建议通知协作成员执行git pull origin 分支名同步最新分支状态。注意恢复远程分支后若之前有成员基于该分支的历史提交开发需通知成员先执行git fetch origin 分支名再确认本地分支与远程同步避免版本不一致若远程分支删除后有新提交误推送到同名分支需先删除错误的同名远程分支git push origin --delete 分支名再执行上述恢复步骤。三、远程相关误操作误push、push敏感信息场景10写错提交信息已git push到远程现象已经将错误的提交信息push到远程仓库想修改提交信息不影响代码只改描述。急救步骤谨慎操作会修改远程历史# 1. 本地修改最近一次提交信息gitcommit--amend# 2. 强制push到远程覆盖远程的commit记录gitpush-forigin 分支名注意事项仅在自己单独开发的分支上使用如果是多人协作的分支强制push会覆盖别人的提交导致代码丢失如果已经有其他人基于这个错误的commit做了开发绝对不能用这个方法建议新增一个commit补充说明即可。场景11误push多余文件到远程已push现象将不需要提交的文件比如敏感配置、日志push到远程仓库想删除远程的文件同时保留本地文件。急救步骤# 1. 本地删除暂存区和远程的文件保留工作区文件gitrm--cached多余的文件名# 2. 提交删除操作gitcommit-m删除远程多余文件本地保留# 3. 推送修改到远程完成删除gitpush origin 分支名关键说明–cached 参数是核心仅删除暂存区和远程的目标文件不会删除本地工作区的任何文件若未加此参数会同时删除本地文件务必慎用。删除后建议在.gitignore文件中添加该文件或文件后缀从根源上避免下次误提交若误push多个多余文件可批量执行git rm --cached 文件名1 文件名2提交后推送即可完成批量删除。场景12push了敏感信息已push比如密钥、密码现象不小心将密钥、数据库密码等敏感信息push到远程这是高危操作必须彻底删除避免泄露。急救步骤彻底删除分两种情况情况1敏感信息在最近一次commit未被其他人pull# 1. 本地修改文件删除敏感信息保存# 2. 撤销最近一次commit将修改放回暂存区gitreset--softHEAD~1# 3. 重新提交不包含敏感信息gitcommit-m删除敏感信息# 4. 强制push到远程覆盖历史gitpush-forigin 分支名情况2敏感信息在历史commit中多次提交后才发现# 1. 使用filter-branch命令彻底删除历史中的敏感文件/内容gitfilter-branch--force--index-filtergit rm --cached --ignore-unmatch 敏感文件路径--prune-empty --tag-name-filtercat----all# 2. 强制push到远程覆盖所有历史记录gitpush-forigin--all# 3. 可选如果有标签也需要强制push标签gitpush-forigin--tags注意事项注意事项这个操作会彻底修改Git历史多人协作分支绝对不能用会导致其他人的本地仓库和远程不一致敏感信息一旦push即使删除也可能被其他人通过历史记录查到建议同时更换敏感信息比如重新生成密钥、修改密码如果是公开仓库泄露风险更高必要时可联系仓库平台如GitHub、Gitee删除历史记录补充若敏感信息是“单个文件中的部分内容”而非整个文件无需删除整个文件可修改文件删除敏感内容后执行git add、git commit再强制push步骤同场景12-情况1避免误删有用内容。这个操作会彻底修改Git历史多人协作分支绝对不能用会导致其他人的本地仓库和远程不一致敏感信息一旦push即使删除也可能被其他人通过历史记录查到建议同时更换敏感信息比如重新生成密钥、修改密码如果是公开仓库泄露风险更高必要时可联系仓库平台如GitHub、Gitee删除历史记录补充若敏感信息是“单个文件中的部分内容”而非整个文件无需删除整个文件可修改文件删除敏感内容后执行git add、git commit再强制push步骤同场景12-情况1避免误删有用内容。四、终极急救所有操作都搞乱了想回到最近一次正确的commit现象不知道自己做了哪些操作工作区、暂存区一团乱想彻底回到最近一次git commit的状态删除所有本地修改。急救命令慎用会删除所有未提交的修改gitreset--hardHEAD操作说明这个命令会将工作区、暂存区全部恢复到最近一次commit的状态所有未commit的修改都会被彻底删除且无法恢复。如果有需要保留的修改先执行git stash保存再执行该命令补充细节若想回到更早的commit状态可将HEAD替换为对应commit_id通过git log查看执行git reset --hard commit_id同样慎用会彻底删除后续所有未提交修改。五、避坑提醒必看执行任何reset、force push、filter-branch等修改历史的命令前建议先备份代码比如复制项目文件夹避免不可逆的损失多人协作的分支尽量不要执行强制push除非确认没有其他人在该分支上开发重要操作前先执行git status查看当前状态git log查看提交历史避免误操作敏感信息密钥、密码、配置文件一定要加入.gitignore从根源上避免误提交如果不确定命令的作用先在测试分支非主分支测试再应用到开发分支补充日常操作中可定期执行git fetch origin同步远程分支状态避免因本地分支与远程不一致导致误操作如误合并已删除的远程分支补充若误操作后无法确定急救方法可先执行git status、git log、git reflog 三个命令查看当前状态和操作历史再对应查找对应场景的急救方法避免盲目执行命令导致二次错误。最后Git的误操作并不可怕关键是找对急救方法。建议将这篇手册收藏起来遇到问题时直接速查节省时间。如果有其他未覆盖的误操作场景欢迎在评论区补充一起完善这份急救指南
返回列表