尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Git入门:从零掌握最流行的分布式版本管理工具

Git入门:从零掌握最流行的分布式版本管理工具 一、为什么Git这么火学Git之前我一直以为它只是个“保存代码历史”的工具。后来才发现Git之所以能成为程序员必备技能是因为它解决了团队协作中一个很现实的问题——很多人同时改同一份代码怎么保证不乱Git的诞生本身就挺传奇的。Linux系统的创始人Linus Torvalds在2005年之前一直靠手工合并全世界志愿者发来的代码。想想就知道有多痛苦——几千人给你发diff文件你手动一个个合并。后来用了商业工具BitKeeper结果因为有人破解协议对方收回了免费使用权。Linus一怒之下两周时间自己写了个Git出来。一个月后整个Linux源码就切到了Git上。从那时起Git就成了开源社区的事实标准GitHub上线后更是彻底点燃了它的普及。二、集中式VS分布式彻底搞懂区别刚开始学Git时我总搞不清它和SVN到底差在哪。后来自己用了一次SVN才明白。集中式SVN、CVS这类就像一个公共图书馆。所有人都只能去这一个图书馆借书、还书、修改书的内容。如果你网络不好或者图书馆关门了你什么都干不了。最要命的是如果图书馆着火了服务器挂了所有书就都没了。分布式Git则是每个人家里都有完整的图书馆副本。你可以随时在家看书、改书、记录修改。哪天想同步了再和总馆对一下就行。哪怕总馆没了随便找一个人家里的副本就能恢复全部内容。这个区别带来的实际体验是用Git时git log、git diff、git branch这些操作都是秒回的因为全在本地。而用SVN每次查日志都要连服务器等得心焦。三、Git的设计理念快照不是差异SVN记录的是“每次改了什么”——比如第3行从A改成B了第7行新增了C。它存的是一系列差异补丁。Git记录的是“每次提交时所有文件的完整快照”。就像拍照一样每次提交都拍一张“全家福”把所有文件此刻的状态都记录下来。如果某个文件没变Git不会重复存只指向上一次的快照。用久了就会发现Git这种设计更符合直觉我想回到某个版本就是直接把那次快照还原出来而不是“从当前版本往前算把100个补丁一个个打回去”。四、Git的安装与初次配置安装Git直接去官网git-scm.com下载对应系统的安装包就行。Windows用户建议安装时勾选“Git Bash Here”选项这样在任何文件夹右键都能打开Git命令行。安装完第一件事是配置用户名和邮箱。这一步很重要因为每次提交都会记录这两个信息git config --global user.name 你的名字git config --global user.email 你的邮箱git config的配置分三个级别仓库级别--local只对当前仓库生效、用户级别--global对你所有仓库生效、系统级别--system对整台电脑所有用户生效。优先级是local global system。日常用global就够了。五、理解Git的三大区域工作区、暂存区、版本库这可能是Git新手最容易晕的地方。我用一个比喻来帮你记住工作区就是你正在写代码的文件夹。相当于你的草稿纸随意写随意改。暂存区是git add之后文件待的地方。相当于你把写好的内容放到了一个“待提交区”还没正式归档。版本库是git commit之后文件真正存进去的地方。相当于正式归档入库了。为什么要分三步修改 → add → commit因为有时候你改了5个文件但只想提交其中2个作为一次独立的修改这时候就可以先add这2个commit一次再处理剩下的。如果所有修改必须一次性提交反而不灵活。六、Git最常用的几个命令一初始化仓库和查看状态在项目文件夹里执行 git init会生成一个.git隐藏文件夹。这就是版本库的核心所有提交记录都存这里。任何时候想看看当前仓库的状态敲 git status。这个命令会告诉你哪些文件有改动没add哪些已经add了没commit以及当前在哪个分支。基本上git status是我用得最频繁的命令。二添加和提交git add 文件名 把指定文件加入暂存区。git add . 是把当前目录所有改动都加入暂存区日常开发最常用。git commit -m 提交说明 把暂存区的内容提交到版本库。提交说明一定要写清楚这次改了什么方便以后查日志。三查看历史git log 显示所有提交历史。加 --prettyoneline 可以让每条记录只显示一行看着更清爽。四版本回退写代码难免改错想回到过去。Git提供了几种方式git reset --hard HEAD^ 回退到上一个版本。HEAD^^是上上个版本。HEAD~100是回退100个版本。如果记不住回退了几个版本用 git reflog 可以看到所有操作历史包括reset操作找到你想回去的那个版本的commit号用 git reset --hard 版本号 就能跳回去。七、分支Git最强大的特性刚开始用Git时我一直以为master就是“主分支”其他分支都是“次要”的。后来才明白所有分支都是平等的master只是Git默认创建的第一个分支而已。分支的本质是什么是一个指向某个提交的指针。创建分支就是创建一个新的指针切换分支就是把HEAD指针指向另一个分支。所以Git创建分支极快只是改了个指针而已。一常用分支命令git branch 查看所有分支当前分支前面会有个*号。git branch dev 创建一个叫dev的新分支。git checkout dev 切换到dev分支。git checkout -b dev 创建并切换到dev分支这是最常用的快捷方式。二合并分支切回到master分支后执行 git merge dev就把dev的内容合并到master了。Git会自动进行三方合并如果没有冲突就直接合并成功。三冲突解决当两个分支修改了同一个文件的同一行时合并就会冲突。Git会在冲突的文件里标出 HEAD我当前分支的修改对方分支的修改 dev你需要手动编辑这个文件删掉那些标记符号保留你想要的内容然后重新add和commit。第一次遇到冲突时我慌得不行后来发现其实很简单——Git只是告诉你“两边都改了同一处我猜不到你要哪个你自己决定”。四分支删除合并完成后可以删除分支git branch -d dev。如果分支有未合并的内容git会阻止删除可以用 -D 强制删除。八、Git Stash临时藏起你的修改这功能救过我很多次。有时候正在写一个功能突然来了个紧急bug要处理。但代码才写一半还没到可以提交的程度。这时候 git stash 就派上用场了。git stash 会把工作区和暂存区的所有修改保存到一个栈里让你的工作区恢复到干净状态。然后你可以放心切分支修bug。修完之后切回来执行 git stash pop之前的修改就全部恢复了。git stash list 可以查看栈里保存了哪些修改。如果有多个stash每次pop都会恢复最近的那个。九、实际开发中常用的分支策略学完基本命令后我最大的困惑是到底该怎么用分支后来看了很多团队的分支模型总结出一套最常用的master或main分支线上环境运行的代码永远保持稳定可发布。develop分支日常开发的主线所有新功能最终都会合到这里。feature分支每个新功能单独开一个分支开发完合并到develop后删除。release分支准备发布时从develop拉出来只修bug不做新功能测试通过后合并到master。hotfix分支线上出了紧急bug从master拉分支修修完同时合并到master和develop。这套策略的核心理念是master永远稳定develop持续集成feature各玩各的互不影响。十、总结一下Git刚学时确实容易晕因为概念比SVN多。但只要理解了几个核心点后面就顺了第一分布式意味着本地操作飞快不需要时刻联网。第二三个区工作区、暂存区、版本库的流转是add → commit。第三分支就是指针创建和切换都极快。第四多用git status和git log不会迷路。这学了一篇但离精通还远。下一篇文章准备写.gitignore配置和远程仓库协作push、pull、解决冲突。先到这我得去跑几个命令消化一下。
返回列表