踩坑无数!终于捋顺Git基础核心工作流(新手必看)

踩坑无数!终于捋顺Git基础核心工作流(新手必看) 我刚学Git那会一直有个超级大的疑惑憋在心里为什么保存代码非要分 git add 和 git commit 两步当时网上教程清一色直接甩命令我照着敲了无数次只会机械复制粘贴完全不懂底层逻辑。自己本地瞎写代码还好一到多人协作项目立马翻车要么文件没提交上要么版本乱套要么改了一堆东西回头想撤回根本无从下手。直到我沉下心从零梳理了Git的基础设计逻辑跑完一遍完整流程、踩完所有新手坑才算真正搞懂——这两步命令根本不是多余的是Git最核心的设计精髓。完整文章地址https://juejin.cn/post/7642608494765473826今天就用我自己的学习复盘把这套最基础、但最重要的Git工作流掰碎了讲清楚。先说说没有Git之前我们写代码有多狼狈大家可以回想一下初学写代码的时候没有版本控制工具我们都是怎么存代码的我以前最经典的操作项目文件夹复制粘贴重命名「项目v1」「项目v2」「修复bug最终版」「最终版绝对不改了」……说实话这种纯本地存文件的方式就是单机版本管理漏洞多到离谱第一风险极高电脑硬盘一坏、文件夹误删所有代码直接清零找不到任何历史修改记录第二完全没法团队协作几个人同时改一个项目传文件、发压缩包代码重复、覆盖、丢失是常态第三极其不工程化你改了什么、什么时候改的、为什么改完全没有记录后续复盘、迭代根本无从谈起。而Git的出现就是为了解决这些问题。它最核心的身份是分布式版本控制系统。这里用个大白话类比传统单机代码相当于每个人手里只有一份专属草稿而Git分布式是团队每个人的电脑上都存着一整套完整的项目仓库同时还有GitHub/Gitee这类远程中央仓库做同步所有人的修改都能有序汇总、追溯再也不会乱套。Git最核心的概念版本快照很多新手搞不懂版本控制本质是没理解「版本」是什么。我之前一直以为版本就是记录每一行代码的改动差异。后来才发现我完全理解错了Git的版本是项目某一时刻的完整快照。就像你手机拍照按下快门的一瞬间定格了画面所有内容。每一次 commit 提交就是给我们的整个项目拍了一张完整的快照Git会把这张快照保存下来后续不管是回退、对比、查看历史都是基于这一张张快照来操作的。从零搭建本地Git仓库实操走一遍想要让普通文件夹拥有版本控制能力第一步永远是git init这也是我学Git敲的第一个正经命令。1. git init普通文件夹变身代码仓库在你的项目根目录打开Git Bash执行初始化命令git init执行完你会发现目录里多了一个.git 隐藏文件夹。新手最大的坑绝对不要手动修改/删除.git文件夹这个文件夹是整个仓库的核心所有版本记录、修改日志、关联远程仓库的信息全在这里。我之前手贱点开改了个配置直接把整个仓库搞废所有版本记录全部丢失血的教训。这个命令的本质就是把当前普通项目目录升级为拥有完整版本控制能力的Git本地仓库。如果想看隐藏的.git文件夹可以执行ls -all2. git add把改动放进暂存区项目写完文件后第一步不是直接提交而是执行 git add。比如我新建了一个 readme.md 文档想要纳入版本控制就执行git add readme.md很多人包括我当初都疑惑为什么不能直接提交非要多一步暂存后来实操多了才懂暂存区stage是Git超人性化的设计我们开发一个功能往往会改很多文件index.html页面、common.css样式、common.js脚本。如果没有暂存区改一个文件就要提交一次版本会碎得一塌糊涂。而有了暂存区我们可以# 多次add汇总所有功能修改 git add index.html git add common.css git add common.js多次add的操作只会把文件暂时放到暂存区不会生成新的版本。相当于你先把所有修改的零件全部放到一个临时篮子里等一个功能完整开发完再统一打包。而且这个阶段还能「后悔」如果某个文件改废了还能从暂存区撤下来不会影响仓库版本。如果您只是想把文件从暂存区取出保留文件中的代码修改以便重新编辑请使用gitreset HEAD index.html如果您误将不该追踪的文件如编译生成的文件、日志等加入暂存区且希望 Git彻底忽略它文件变为untracked状态。这仅解除版本追踪不会删除本地硬盘上的物理文件。gitrm--cachedreadme.md如果你已经git add了文件但想把它从暂存区拿出来即笔记中提到的“提前后悔一下”但不想丢弃代码修改git restore --staged index.html3. git commit打包生成正式版本快照等所有相关文件都add到暂存区功能开发完成就可以执行提交命令生成正式版本git commit -m 完成首页页面整体功能这里重点说下-m备注参数我新手期最敷衍经常写「修改bug」「更新代码」这种废话。后来参与团队项目才知道commit备注是团队协作的核心leader复盘代码、同事追溯修改、自己后续回退版本全靠这段备注。备注一定要精准描述本次改动内容绝对不能乱写。执行成功后控制台会提示类似2 insertions的信息代表本次提交新增了2行代码这就是Git严谨的版本记录。误 Commit 后的补救如果已经将文件commit到了本地仓库才发现错误撤销最近一次提交将文件状态回退到暂存区供您重新整理。git reset --soft HEAD~1进阶——推送到远程仓库前置工作创建一个git远程仓库执行三条命令让本地连接远程仓库git push推送到远程提交之后就可以推送到远程了和团队的其他队友一起协作git push -u origin master我最常用的保命命令git status这里必须安利一个新手一定要养成的习惯任何关键操作前先敲 git status。git status这个命令就是帮你看清当前仓库的所有状态杜绝盲目操作。我之前很多报错都是因为不看仓库状态瞎add、瞎commit导致的。通过git status我们能清晰看到文件的三种核心状态这也是Git的基础核心untracked 未跟踪新建的文件Git还没接管不受版本控制to be committed 待提交已经执行add文件在暂存区等待commit生成版本已提交完成commit成功存入本地仓库生成正式快照正规的开发逻辑一定是多次add汇总修改一次commit完成一个开发任务全程保证最终仓库是干净、整洁的没有残留的暂存文件、未跟踪文件。新手高频踩坑总结我全中过梳理完完整流程复盘下我初学的时候踩的所有低级坑大家直接避开就行坑1手动修改.git隐藏文件夹以为是普通配置文件随便改动直接导致仓库损坏版本记录丢失。正确姿势永远不要手动操作.git文件夹所有修改全部用Git命令完成。坑2commit备注敷衍乱写无意义的备注后续根本分不清每一次版本改了什么项目迭代越久越乱。正确姿势备注精准对应功能改动做到见字知意。坑3不看git status盲目操作不知道文件处于什么状态重复add、重复提交导致仓库冗余杂乱。正确姿势每次add、commit前后都用status确认状态。坑4一个文件一次commit不会用暂存区汇总修改把一个完整功能拆成无数个小版本版本日志极其混乱。最后聊聊分支团队协作的基础基础流程跑通后就不得不提git branch分支命令这是多人协作的入门关键。git branch执行这个命令可以查看当前项目的所有分支。简单来说分支就是给项目开一条「独立开发线」大家在各自的分支上开发功能互不干扰开发完成后再合并到主分支。如果说前面的add/commit是单人开发的基础那分支管理就是团队协作的核心后续我再单独出一篇分支实战和合并踩坑的复盘。我的三点核心学习收获折腾完这一遍彻底摆脱了「只会敲命令不懂原理」的状态总结三个最关键的心得Git两步命令是分工明确的add是汇总修改临时存放commit是固化版本永久存档暂存区的设计是为了让版本迭代更规整。版本的本质是快照不是代码差异这也是Git回退、合并功能能精准实现的根本原因。规范比会敲命令更重要干净的仓库状态、清晰的commit备注是后续团队协作、项目维护的关键。另外也说句实话Git基础工作流不是万能的简单的个人小项目、一次性Demo完全没必要上Git反而多此一举。但只要是需要迭代、需要多人协作、需要长期维护的项目Git就是必备技能没有替代方案。这次先把最基础的本地工作流捋清楚了下一篇再讲远程仓库关联、分支合并、冲突解决这些高频场景。如果你之前也一直死记Git命令、不懂底层逻辑看完这篇有没有豁然开朗欢迎评论区聊聊你初学Git踩过的坑互相避坑