ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Git新手避坑指南:从安装配置到首次提交推送全流程

Git新手避坑指南:从安装配置到首次提交推送全流程 1. 先搞懂Git到底在解决什么问题如果你是个刚开始写代码或者做文档协作的新手大概率会遇到这样的场景写了一个项目文件改来改去最后桌面上堆满了毕业设计_最终版_v3_改改_真最终.doc这种东西更惨的是过两天自己都分不清哪份是最新的一打开发现改错版本白干了半天。这就是典型的没有版本管理意识的表现。Git就是一个帮你管好这些版本的工具而且它不是简单帮你存几份存档——它记录了整个项目从出生到现在的每一次变化每一行代码是谁在什么时间加的、因为什么加的、后来又被谁改成了什么样全部可追溯。这个能力在个人项目和团队协作里都极其重要。从安装到提交这套流程看起来简单但里面的坑一点都不少。比如很多人卡在commit这一步写不进去有人clone完项目发现push不上去还有人在Windows上装完Git发现中文乱码、换行符报错、权限认证失败等等。这篇内容就顺着安装→配置→初始化→提交→关联远程仓库→推送这条主线把每个环节的细节和新手最容易踩的坑一次讲透尽量让你照着做就能顺利走通第一遍。1.1 用生活化的方式理解Git的工作方式要理解Git先忘掉服务器代码这些词把它想象成一个游戏存档系统。你打游戏的时候每过一个关卡就存一个档。打得不好可以读旧档重新来打得好可以继续往上走。Git的提交commit就是存档每个存档都会自动记下你当时保存的是什么状态。但Git比游戏存档强在两点第一它允许你在同一个项目里开多个平行世界这就是分支你在平行世界里随便折腾折腾好了再合并回主线不影响主线的稳定状态第二它能把存档之间改了哪些内容列得清清楚楚而不是只有一个简单的覆盖。Git里最核心的三个区域是工作区你电脑上实际看到的文件、暂存区你准备要提交的改动清单、版本库已经存档好的历史记录。平时你编辑文件是在工作区觉得改得差不多了就用git add把文件放进暂存区最后用git commit把这些改动正式存成一条历史记录。很多人刚接触时容易搞混add和commitadd是挑菜把你想提交的文件挑到盘子里commit是下锅把你挑好的菜一次性煮熟存起来。只add不commit改动还没真正被记录。1.2 为什么新手必须理解提交记录而非保存文件I just need to save my work——很多新人刚开始会这么想觉得CtrlS就够了为什么要多此一举去学commit一个真实的例子我有位朋友做一份数据分析报告写了三千字改了十几个版本用文件名区分v1、v2、v2_修改、v2_修改_最终、v3_最终版2。结果投出去之前的晚上甲方说还是觉得你第一次那个版本的思路好。他当场傻眼——最早的版本早被覆盖了根本找不回来。这就是保存文件和版本提交的本质区别。CtrlS只解决文件不丢的问题而Git解决的是每一个历史状态都不丢、随时可回退、随时可对比的问题。每次commit都像是拍了一张快照以后你可以在任意两张快照之间对比差异、查看当时改了什么、甚至整体回退。理解了这个理念后面学任何Git命令都不会觉得是在背命令而是在操作这套存档系统。2. 安装环节一份能直接照抄的避坑指南Git的安装本身不难难的是装完之后那几步隐形配置——很多新手装完就急着用结果提交的时候发现不知道我是谁push的时候发现没权限白折腾半天。2.1 Windows系统的安装步骤与关键选项Windows下的官方安装包从Git官网下载注意看清是64位还是32位版本。下载完双击运行一路Next基本能装好但有几个界面建议别无脑跳过Select Components建议勾选Git Bash Here和Git GUI Here。右键菜单里出现Git Bash会极大方便后续操作不用每次手动启动终端再cd到项目目录。Default editor默认是Vim不是不能用但对新手极不友好——进去不知道怎么打字、不知道怎么写完退出。建议选择Use Visual Studio Code as Gits default editor前提是你装了VS Code或者选Notepad也可以。Adjusting your PATH environment选默认的Git from the command line and also from 3rd-party software就好这样在CMD和PowerShell里也能直接敲git命令。Line ending conversions这个选项最容易出问题具体后面章节仔细说安装时默认选项就行不需要改。Configure the terminal emulator默认的Use MinTTY即可显示效果更好复制粘贴也更顺手。装完测试方法打开任意终端WinR输cmd回车或者在桌面空白处右键选Git Bash Here输入git --version能看到版本号就说明装好了。2.2 macOS与Linux下的安装方式macOS新版的系统里在终端直接敲git --version系统会提示你安装Command Line Tools按提示装就行。也可以用Homebrewbrew install git。用Homebrew的好处是装的是较新的稳定版版本管理方便以后升级一条命令搞定。Linux发行版则一般用包管理器安装Debian/Ubuntu系执行sudo apt install gitCentOS/RHEL系执行sudo yum install git。装完同样用git --version验证。提示如果你用的不是自己长期维护的个人电脑比如公司电脑装完Git后最好先确认是否已设置过全局配置避免覆盖别人的配置。2.3 安装完成后必须立刻做的两项配置第一项是设置用户名和邮箱。这步不是可选项Git每次提交都会把作者信息写进提交记录里没配置的话会在commit时报错。只需要执行两行命令git config --global user.name 你的名字 git config --global user.email 你的邮箱example.com第二项是配置SSH密钥如果之后要往GitHub、Gitee这类远程仓库推代码。虽然用HTTPS也能推但每次push都要输账号密码而且GitHub已经不支持密码认证必须用Personal Access TokenSSH则是一劳永逸的方案配置一次之后基本无感。ssh-keygen -t rsa -b 4096 -C 你的邮箱example.com执行后一路回车即可默认会在用户主目录下生成一个.ssh文件夹里面有两个文件id_rsa是私钥这个文件永远不要传给任何人id_rsa.pub是公钥内容可以填到GitHub/Gitee的SSH key设置页。查看公钥内容用cat ~/.ssh/id_rsa.pub。实操心得如果你之前生成过SSH密钥但忘了放在哪可以执行ls ~/.ssh查看。如果提示No such file or directory说明还没生成过正常走上面的流程就行。3. 初始化仓库从零到第一次提交全流程装好配置好就到了真正使用Git的阶段。这里分两种场景一种是项目从零开始文件夹里还没任何东西另一种是项目已经写了一堆文件你想把它纳入Git管理。两种场景的起点略有不同但后续逻辑一致。3.1 建仓库的两种方式场景一从零开始的新项目先创建一个项目文件夹然后打开终端进入这个目录Windows用户建议在此文件夹空白处右键选Git Bash Here路径就自动对了执行git init执行完文件夹里会多一个隐藏的.git目录这就是Git的仓库数据库项目的所有版本信息都存在这里面。注意这个目录平时基本不需要碰但也别乱删删了项目历史就全没了。场景二已有大量文件的旧项目同样进入项目目录执行git init后续流程一样。唯一要注意的是旧项目里可能有很多不该被管理的文件比如临时文件、日志、编译产物、依赖包目录这些要先写进.gitignore文件里不然一次add会把这些垃圾文件全都提交进去。3.2 .gitignore文件新手最容易忽略的操作.gitignore的作用是告诉Git哪些文件或目录不要纳入版本管理。新手最常见的问题是项目里有一个node_modules文件夹几万个文件一不小心全add进来了每次操作都卡得不行提交记录也臃肿不堪。正确的做法是在项目根目录新建一个.gitignore文件把不需要纳入版本管理的路径写进去。一个前端项目典型的.gitignore长这样node_modules/ dist/ *.log .DS_Store .envnode_modules/依赖包目录别人clone你的项目后自己执行npm install就能装回来没必要入库dist/打包构建产物每次构建都会重新生成*.log日志文件.DS_StoremacOS的文件夹配置文件Windows上不需要但放进去无妨.env环境变量文件常常包含密码、密钥绝对不能提交避坑心得.gitignore要尽早创建最好在第一次add之前就写好。如果文件已经被Git跟踪了这时再改.gitignore不会生效——需要先执行git rm --cached 文件名把它从版本管理中移出。新手往往在这里卡很久。3.3 工作区、暂存区、版本库三者之间的配合准备好.gitignore后项目里新建一个测试文件比如index.html或者README.md里面随便写点内容。然后依次执行git status git add README.md git status第一次git status会显示这个文件处于Untracked状态也就是Git知道有这么一个文件但还没跟踪它。执行add之后再git status会看到它跑到了Changes to be committed下面这就是进入了暂存区。这时明白了前面说的挑菜和下锅add是把菜挑到盘子commit才是下锅。执行提交git commit -m docs: 初始化项目添加README说明-m后面的是提交信息建议尽量写清楚这次提交做了什么改动。千万不要写update或者修改这种没有任何信息量的信息三个月后你自己回来看都不知道改了什么这算得上Git使用中最常见的问题之一。3.4 提交信息规范与提交记录查看提交信息看起来是个小事但在多人协作或者自己维护长期项目时清晰的提交历史能节省大量排查问题的时间。目前业界最通用的是Conventional Commits规范简单版如下feat:新功能fix:修复bugdocs:文档变更style:代码格式调整不影响功能的改动refactor:重构既不是新功能也不是修bugtest:添加或修改测试chore:构建过程或辅助工具的变动比如feat: 增加用户登录功能、fix: 修复移动端列表滚动卡顿、docs: 更新部署说明。这种写法在GitHub、Gitee上还能自动生成变更日志对长期维护的项目帮助很大。提交完成之后用git log查看提交记录会看到哈希值、作者、日期、提交信息等信息。按q退出查看界面——这个新手经常卡住不知道怎么退出来。实操心得第一次提交建议只用git commit -m等熟悉了再用git log --oneline --graph --decorate这类带图形展示的命令一眼看清分支结构会很直观。4. 提交记录的管理撤销、修改与回退学会了基本提交等于能往存档系统里存数据了。但实际使用中你一定会遇到存错了存完了还想改想回到之前的某个存档这类需求。这一节把最常见的几个撤销场景讲透。4.1 提交完了才发现忘了加文件这种场景特别常见git commit -m feat: 完成登录功能执行完突然想起来有个配置文件忘了提交。这时候不需要慌张Git提供了补救命令git add 忘掉的配置文件 git commit --amend--amend会修改最近一次提交而不是新开一条提交记录。注意这个命令只适用于还没有push到远程仓库的提交。如果已经push了再用amend会导致本地和远程的提交历史不一致push会被拒绝新手容易在这里懵。所以规则是本地提交没push前随便amendpush之后尽量别碰历史。4.2 文件已add但发现改错了想撤回有些时候改了一堆文件全都add了正准备提交突然发现某个文件不该提交。这时用git restore --staged 文件名这个命令会把文件从暂存区撤回到工作区但不会动文件的实际内容。如果你只是想撤销add这个动作这就是唯一正确的命令。4.3 想回退到之前的某个版本回退到历史版本有两种策略git reset和git revert。区别很关键。git reset是直接抹掉记录——把当前分支的HEAD指针挪到指定的历史提交上中间那些提交记录就消失了严格说是变成悬空提交短时间内可以救回来。git reset --hard HEAD~2上面这个命令表示回退到两个提交之前并且放弃之后的所有改动。危险在于这是不可逆的如果你的改动没有push到远程也没在任何地方备份就真的丢了。git revert则是反向提交——生成一条新的提交记录把之前的某次改动给反过来。它不会删除历史而是留下清晰的撤销痕迹。在团队协作中推荐使用revert而不是reset因为revert不会重写历史其他人pull代码时不会遇到冲突和混乱。4.4 已经push的提交如何撤销代码已经推到远程仓库了发现写错了这时候的处理顺序是先在本地回退用revert然后正常pushgit revert HEAD git push这样远程仓库会多一条撤销记录但历史是连续的、干净的。不要尝试git reset后强制pushgit push -f除非你明确知道后果——强制推送会覆盖远程历史如果团队其他人已经基于旧提交做了开发你这一push就能把他们的工作全部搞乱。5. 关联远程仓库与推送全流程本地提交只是为了自己存档真正的协作价值体现在推送push到远程仓库让代码同步到云端别人能拉取、能协作。这一步新手遇到的问题最多单独开一章详细拆解。5.1 在Gitee或GitHub上建远程仓库以国内访问较快的Gitee为例登录后点击新建仓库填一下仓库名称和描述是否初始化仓库建议先不勾选——如果你本地已经有git init过的项目勾选后会多出一条无关的提交还得处理合并。建好仓库后页面会显示几种推送方式保存好这个页面后面要用。GitHub的创建流程基本一致区别主要在于GitHub页面是全英文操作路径是右上角 → New repository。5.2 本地仓库关联远程仓库假设你本地仓库已经有一些提交了现在要把代码推到远程。先添加远程仓库地址git remote add origin gitgitee.com:你的用户名/仓库名.git这里的origin是远程仓库的默认命名约定俗成的名字改也行但没什么必要。添加之后执行git push -u origin main这里有两个细节要注意。第一分支名Git新版本默认分支是main老版本默认是master。如果你本地是master而远程是mainpush会提示branch not found。先看远程仓库默认分支名再决定push什么分支。第二-u参数的作用是建立本地分支与远程分支的关联这样以后直接敲git push就能推送不用每次指定远程仓库和分支名。5.3 push失败的常见原因与解决方法认证失败如果你添加远程地址用的是HTTPS格式https://gitee.com/用户名/仓库名.gitpush时会要求输入账号密码。Gitee和GitHub现在都不支持纯密码认证了需要生成一个Access Token或者用SSH方式。建议直接用之前配置好的SSH方式省去每次输凭据的麻烦。网络问题某些地区访问GitHub经常连接超时。遇到这种情况建议换用Gitee或国内代码托管平台或者配置代理访问——这个话题不展开但你在实际操作中如果遇到push一直卡住大概率就是网络层面的问题。分支名不一致本地是main远程默认是master或者反过来。用git branch -a查看所有本地和远程分支确认清楚。远程有本地没有的提交如果远程仓库初始化时勾选了初始化README而你本地也有提交直接push会被拒绝提示failed to push some refs。这时需要先把远程内容拉下来合并git pull origin main --allow-unrelated-histories--allow-unrelated-histories的意思是允许两段没有共同祖先的历史合并到一起。新手执行git pull遇到conflict很容易慌其实核心就是编辑冲突文件、保存、commit、push。5.4 克隆已有项目的方式如果你是接手别人的项目不需要本地init直接克隆更合适git clone gitgitee.com:用户名/仓库名.git克隆下来的项目会自带远程仓库配置直接在项目里git checkout -b 新分支名开个新分支干活就行。6. 新手最容易踩的5个坑与实操心得最后这部分算是给前面的内容做个实战缝合——把新手在真实使用中最多遇到的几个问题集中列出来可以当作排查表来用。6.1 常见问题速查表问题常见原因解决办法commit时报错Please tell me who you are没配置user.name和user.email执行git config --global配置push时报错Authentication failed使用了HTTPS地址且凭据错误改用SSH地址或使用Access Tokenpush时报错failed to push some refs远程仓库有本地没有的提交先git pull合并再push打开git log界面按什么都退不出去不熟悉less分页操作按q退出按j/k上下翻Git Bash里中文文件名显示乱码Windows下编码不兼容执行git config --global core.quotepath false文件改了但git status不显示文件已被.gitignore忽略检查.gitignore内容确认是否匹配6.2 换行符问题Windows用户的隐藏炸弹Windows和Linux/macOS的换行符标准不一样Windows用CRLF回车加换行Linux/macOS用LF只有换行。Git默认会把代码文件里的换行符做转换本意是好的但有时候会导致我什么都没改git status却显示一堆文件有改动。安装时那个Line ending conversions选项默认的Checkout Windows-style, commit Unix-style通常够用保持默认即可。如果遇到换行符问题执行git config --global core.autocrlf false可以关闭自动转换。不过提醒一下团队协作时所有成员的换行符配置最好一致否则会出现跨平台开发时频繁刷diff的情况。6.3 误提交大文件的处理方案项目传到一半发现不小心提交了一个几百MB的压缩包最糟糕的是历史记录里已经有它的快照了即使后面删掉仓库体积也不会变小历史记录里还留着。这是Git的一个特性它保存的是快照不是差异。处理这个问题的标准步骤是如果已经推送先用git rm --cached把大文件从版本管理中移除并提交一次让它不再被后续版本跟踪如果历史里已经存在且仓库已经很大对新手来说最简单的处理是新开一个仓库或者用BFG Repo-Cleaner清洗历史。但这些都是后悔药最好的办法是提前在.gitignore里就把大文件和构建产物挡住。6.4 尽量少用强制推送和reset --hard前面提到过git push -f和git reset --hard的危险性这里再单独强调一次这两个命令是新手操作事故的高发区。一旦执行可能导致本地或远程的历史被彻底改写且很难恢复。如果确实需要用git reset --hard执行前务必备份当前分支git branch backup-branch或者用git stash暂存当前改动。这样即使踩了坑还能切回备份分支救回来。实操心得我见过太多新手因为看了某个教程教回退就用git reset --hard然后把自己工作搞丢的。稳妥的做法是能不用就不用如果只是想撤销某次改动的效果用revert确认要放弃所有本地改动时才用reset --hard。6.5 分支开发的基本习惯最后分享一个干活习惯不管你是个人项目还是小团队协作都适用永远不要在main/master分支上直接改代码。养成开分支的习惯哪怕只是自己一个人写git checkout -b feature/login # 开发完成 git add . git commit -m feat: 完成登录功能 git checkout main git merge feature/login这样做的收益是main分支永远保持可运行、可发布的稳定状态你随时可以在main上打tag发版本新功能开发过程再混乱都不影响主线的安全。等熟练了之后还可以配合git stash临时存起工作区改动和git worktree同时在一个仓库多个目录干活这类进阶手段效率会更高。这套从安装到提交、再到推送远程仓库的全流程头一次完整走通大概需要半天时间。中间遇到任何一步卡住对照上面的排查表逐项检查绝大多数问题都能自己解决。等你提交了第一条commit、推到了远程仓库Git的使用习惯也就基本建立了后续学任何高级操作都会很自然。
返回列表