ARTICLE DETAIL

资讯详情

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

Git入门到实战:版本管理、云端仓库与分支合并全攻略

Git入门到实战:版本管理、云端仓库与分支合并全攻略 前言从“一个文件夹复制10个版本”到真正敢改代码当我第一次用Git是在一个凌晨两点钟项目眼看着少了一块核心代码而我手头只有三天前的压缩包备份。当时心里就一个念头如果早知道“版本管理”四个字这么值钱我绝对不折腾那几个小时。后来我把Git吃到嘴里、嵌进工作流里发现一个规律想在一个项目里安全地搞事情不管是一个人写死磕需求还是三个人一起薅头发联调Git 云端仓库这套组合就是你最后的保险绳。这话说起来很轻但真正撑起“敢改、能退、丢不了”这三个字背后全是细节。这篇保姆级教程要解决的就是最现实的问题电脑宕了怎么办、误删代码怎么办、多台电脑同步怎么办、同事改了我文件怎么办。我会把Git安装、Git配置、SSH认证、仓库初始化、首次推送、日常提交、分支合并这些环节全部拆开用我踩过的坑代替你即将踩的坑。文章面向小白但也照顾已经装了Git、只是用不溜的人——如果你发现自己在某些命令上从来没有理解过“为什么要这样”那这篇文章值得你从头看完。1. 为什么你正在用的“复制粘贴备份法”迟早出事1.1 三个完全不该被忽视的事实先聊几个场景大家应该都不陌生第一你辛辛苦苦写了一下午的代码想试试新方案改完发现全乱了CtrlZ按了二十下也没回到想要的状态第二你把项目压缩包命名为“最终版”半年后你的电脑里有“最终版”、“最终版2”、“最终版复件”、“最终版真最终”再往后你自己都分不清哪个才是能跑的第三你换了台电脑发现最新代码还躺在旧电脑的桌面上而旧电脑已经被你老婆拿去装了CAD。这三件事的本质都一样你的代码只有一处在存在而且这处的状态全靠你手动记录。Git出现之前大家也这么干但Git出现之后还这么干就有点对不起自己花的电费了。Git做到的事情其实就一句话用提交历史管理你的每一个版本状态用云端仓库让你的代码在任何一台能联网的电脑上随时拉取。版本靠“提交”记录而不是靠“另存为”这就是它和压缩包备份最根本的区别。1.2 云端仓库到底解决了什么问题有朋友会问那我在本地建个Git仓库不开云端行不行行绝对行。但只搭本地仓库隐患依然在硬盘坏了呢电脑进水了呢你的代码还是没了。云端仓库存在的意义就是把本地仓库的完整副本同步到一台或者多台你控制之外的服务器上让代码至少存在三处本地工作区、本地Git仓库、云端仓库。这个“三处存在”的逻辑就是安全感的来源——你丢了任何一处都可以从另一处找回来。很多人还有个误区觉得“我把代码传到云端是不是就公开了”不是的你完全可以选择私有仓库。以国内常用的Gitee码云为例新建仓库时有一个“私有”选项勾选后只有你自己或被你邀请的人能看见代码。GitHub虽然免费版也支持私有仓库但在国内网络环境的连接速度方面差距还是很真实的。所以我后面的例子会以Gitee为主同时也会提到GitHub的对应操作两边逻辑一样只是一个服务器在外面一个在国内。至于GitLab这类自建系统其实也是同一套Git协议懂了核心原理以后换任何一家托管平台都是十分钟的事。2. 先把Git装明白版本选择、安装步骤、初始化配置2.1 安装之前必须做的一个认知准备Git不是编程语言它是一个命令行工具。所以你安装Git之后桌面不会多出一个双击打开的图标你看到的会是一堆命令行。很多小白在这一步就退回去了觉得“我学不会”。其实你只需要记住三四个命令就能开始干活比如git add、git commit、git push、git pull其他都是进阶内容。我甚至建议你就把这四个命令当成日常用语先跑起来再慢慢扩充。版本选择上我建议大家直接去官网git-scm.com下载最新稳定版别用网上流传的“绿色版”或者第三方打包版。Git本身更新不算频繁但每次更新都在修复安全问题装官方版最省心。Windows用户下载.exe安装包后一路Next就行中间有一步“选择默认编辑器”如果你不会用Vim建议选Notepad或者VS Code不然后面提交信息会卡在一个“按i编辑按Esc退出”的界面里我第一次用Vim写提交信息直接呆住了十分钟。macOS用户建议优先用brew install git如果你还没装Homebrew也可以直接下载官方安装包。Linux用户更简单Ubuntu系执行sudo apt install gitCentOS系执行sudo yum install git。装完之后打开命令行输入git --version能看到版本号就说明装好了。2.2 安装完毕后的“第一件事”不是你想象中的push很多人装完Git马上就想去建仓库结果在配置用户名和邮箱这步出了问题。Git的每个提交都会记录作者信息如果你不设置它默认取你的系统用户名提交记录里就会变成一串很怪的名字而且后患无穷别人看到提交记录不知道是谁改的你自己换台电脑也不知道上次提交是你改的。打开命令行执行下面两行命令git config --global user.name 你的名字 git config --global user.email 你的邮箱example.com注意这里的--global参数意思是这台电脑上的所有项目都用这个身份。如果你有些项目想用另一个身份提交可以去掉--global进入项目目录后单独设置项目级别的用户名和邮箱。还有一个细节容易被忽略提交用的邮箱最好和云端仓库账号的邮箱保持一致否则你在Gitee或GitHub上虽然能push但提交记录不会归到你的头像下面贡献图也是空白的。我身边不止一个同事因为这个原因盯着空荡荡的绿色格子怀疑自己是不是被平台限流了——其实只是邮箱没对齐。完成之后可以用一个命令检查配置是否生效git config --list这个命令会打印出当前所有Git配置主要看user.name和user.email有没有正确。2.3 装完就遇到的第一个高频坑git不是内部或外部命令Windows用户装完Git很可能遇到这个提示“git不是内部或外部命令”。原因无非两个要么安装时没有勾选“Add Git to PATH”选项要么安装完之后没有重新打开命令行窗口环境变量没刷新。解决办法是重新运行安装程序在对应步骤找到“Git from the command line and also from 3rd-party software”这个选项选中它重装就行。装完之后务必新开一个CMD或PowerShell窗口再执行git --version你会发现一切正常。还有一个小提示Windows的Git默认还会安装一个叫“Git Bash”的迷你终端我建议大家初期就在这个环境里操作它模拟了类Unix的命令比如pwd、ls -la都挺好用比在CMD里面对反斜杠路径舒服太多了。我目前工作里的90%命令都是在Git Bash里敲的已经成了肌肉记忆。3. 在云端开一个“安全屋”以Gitee为例创建仓库3.1 新建仓库的每一步选择都很关键去Gitee官网注册并登录后点右上角的“”号选择“新建仓库”。这一页几个选项我需要重点解释一下因为每个选项都有人踩过坑。首先是“仓库名称”它会被写进云端仓库的访问地址里比如https://gitee.com/你的用户名/仓库名.git。名字建议用英文或拼音加下划线不要出现空格和中文不然后续使用会有很多莫名的麻烦。其次是“路径”Gitee会基于仓库名称自动生成一个路径你一般不用改。然后是“初始化仓库”那一栏有一个“选择开源许可证”的下拉菜单一套License规则。如果这个项目只是你自己用选“无”就行如果将来要开源最好先了解一下MIT和Apache的区别。再往下最关键的是“是否开源”单选按钮。我强烈建议在你还没决定把代码公开之前一律选私有。这个选项后面对应的是仓库的可见性私有仓库对普通使用者最友好的地方就是没有“是否泄露代码”的心理负担你可以大胆地把各种半成品、测试代码、草稿笔记全部推上去想推多少推多少。等哪天你决定开源了仓库属性随时可以在设置里改成公开不需要重建仓库。最后那一栏“使用Readme文件初始化这个仓库”我建议勾选。原因后面会说它会自动帮你生成一个.git仓库骨架并包含README这样你第一次clone下来不会是个空目录视觉上友好很多也能理解仓库结构。如果你追求极简也可以不勾选无非是一个空仓库自己初始化后推上去。3.2 SSH密钥让你不再每次输密码创建好云端仓库后接下来就是打通本地和云端的认证通道。Gitee和GitHub都支持两种访问方式HTTPS和SSH。HTTPS方式简单粗暴——push和pull的时候弹窗让你输入用户名和密码SSH方式则是通过一对公私钥完成身份认证配置好之后永久不用再输密码还更安全。判断你电脑上是否已有SSH密钥可以看这个目录ls ~/.ssh如果里面有id_rsa和id_rsa.pub这两个文件说明你已经有密钥了直接跳过生成步骤如果没有执行下面命令生成一对新密钥ssh-keygen -t rsa -b 4096 -C 你的邮箱example.com这里的-t rsa是指定用RSA算法-b 4096是密钥长度-C是注释一般写邮箱就行。执行后一路回车它会问你密钥存放位置和密码——如果你设置了密码每次使用SSH时都需要输入密钥密码我建议自己工作的机器上不设置密钥密码省得每次push都多一步。如果你担心安全可以在私人电脑和不连公司网络的机器上用再配合系统开机密码风险已经相对可控了。密钥生成后查看公钥的内容cat ~/.ssh/id_rsa.pub把打印出来的一大串字母数字复制下来回到Gitee网页点头像进入“设置”左侧找到“SSH公钥”粘贴保存。记住公钥可以放心公开它本身就是用来分发的私钥绝对不能外泄它相当于你身份的钥匙。配置好公钥后执行下面命令测试连接ssh -T gitgitee.com第一次连接会提示确认主机指纹输入yes回车。如果看到“Hi 你的用户名! You‘ve successfully authenticated”就说明通道完全打通了。3.3 ssh认证失败怎么破三个最常见的原因“ssh认证失败”是我被问烂了的一个问题也是热搜词里排得比较靠前的。实际处理下来原因基本就三种。第一种公钥粘贴时多了一个空格或者少了换行。SSH公钥是严格格式的开头是ssh-rsa中间一串文字结尾是邮箱这三段之间各有一个空格。如果你从终端复制的时候复制了换行符粘贴后就可能报认证失败。处理方式很简单重新查看并重新粘贴别手动清除任何空白。第二种ssh-agent没加载密钥。有些系统环境下即使你生成了密钥agent进程也没自动把私钥带进来。这种情况执行一下ssh-add ~/.ssh/id_rsa把它手动加进去再试。第三种你连的是GitHub却用了Gitee的地址。我在本地用同一对密钥同时配置了Gitee和GitHub这没毛病但有时候域名敲错了或者仓库远程地址写错了也会报认证失败。这时候可以用git remote -v看看远程地址是否正确再决定下一步。如果你用的是HTTPS方式连远程仓库认证失败的另一个常见原因是账号密码错误但Gitee现在更推荐使用私人令牌Personal Access Token代替密码你在网页端生成一个令牌把它当成密码输入即可。这个令牌的详细生成路径在头像菜单下的“设置 - 私人令牌”里记得保存好因为关闭页面后就看不到第二次了。4. 第一次把本地代码推到云端两条路线一次走通4.1 路线一本地已有代码把整个项目交给Git管理假设你已经有一个项目文件夹叫my-project现在要把它纳入Git并推送到云端。第一步进入这个目录并初始化本地仓库cd ~/my-project git initgit init会在当前目录生成一个隐藏的.git文件夹这个文件夹里装的就是全部分支、历史版本记录和引用信息。如果你哪天想彻底退出版本管理把这个.git文件夹删掉就回到普通文件夹状态但代价是丢失你在此项目上的所有提交历史所以这个操作要慎重再慎重。第二步把项目目录下的所有文件加入暂存区git add .这一步很多人不理解“暂存区”是什么意思。我用个生活类比暂存区就像超市购物车git add是把商品从货架上拿进购物车还没结账git commit才是到收银台结账生成一张小票提交记录。如果不加文件直接commitGit会提示“没有暂存的内容提交为空”。第三步提交并对本次提交写说明git commit -m 初始化项目提交我的第一个版本-m参数后面跟的就是你的提交说明。这里我有个强烈建议提交信息不要写“12345”或者“更新”要写“修复了登录页在Safari下样式错乱的问题”这样的具体描述。理由很简单等你的提交记录累计到几十条上百条你回看历史时靠的就是这一行字含糊其辞等于白写。第四步把云端仓库地址关联为远程仓库git remote add origin gitgitee.com:你的用户名/my-project.git这里的origin是一个别名它指代远程仓库地址。后面你不用每次打超长URL只需要说git push originGit就知道要推送到哪里。你也可以把远程地址起名为gitee或github完全看个人习惯但绝大多数项目的默认约定都是origin。第五步推送到云端git push -u origin master这里的-u参数会把本地master分支和云端master分支关联起来以后你只需要git push不用每次指定分支名。所以-u只要第一次推的时候加一次就够了后面可以省略。4.2 路线二云端仓库已经存在从零开始fork或clone还有一种常见情况云端仓库已经由别人创建好了或者你想从Gitee上拉取一个开源项目。这时你不需要执行git init直接克隆远程仓库到本地即可git clone gitgitee.com:别人的用户名/项目名.git这条命令会把这个项目整个下载下来包括全部提交历史。如果你只想下载某个分支可以加-b参数git clone -b dev gitgitee.com:用户名/项目名.git。我最开始学Git的时候分不清“clone”和“fork”的区别clone是把项目复制到你的本机fork是在云端创建一份拷贝。如果你想参与一个开源项目通常的做法是先在云端fork一份到自己账号下再clone自己fork后的地址这样你改动的提交记录会集中在自己仓库里之后再通过Pull Request请求合并到原项目。这个流程在GitHub和Gitee上都是主流协作方式。4.3 第一次推送就卡住的常见场面很多人第一次push时最常遇到的是一个红色报错“rejected - non-fast-forward”。这个报错的本质是云端上有本地没有的提交记录而且两者不是同一条历史线。原因一般是云端仓库初始化时勾选了“生成README”选项也就是说云端的提交已经有一个了而你本地仓库的提交是另外生成的两边各有一个平行历史Git不知道怎样合并。解决办法有两种一种是无脑撤销云端仓库重建适合项目刚开始还没什么内容的情况另一种是老老实实把云端历史拉下来合并git pull origin master --allow-unrelated-histories这里的--allow-unrelated-histories是明确告诉Git我知道两边历史没有共同祖先但请把它们强行合并。合并完会有一个commit记录生成然后你再git push就通了。这个参数在很多合并场景里都有用比如你想把两个本来独立的项目合并成一个大项目时也必须加它。还有一个小坑是Windows用户最容易碰到的推上去以后提示warning说“LF will be replaced by CRLF”。这是Windows换行符和Linux换行符不一致导致的。Git默认在提交时会把CRLF转换成LF在checkout时再转换回来大多时候无伤大雅。如果你看着烦可以执行一行配置git config --global core.autocrlf true这行配置让Git在Windows上统一处理换行符避免在git diff时出现整行整行的“修改”假象。5. 纳入日常开发commit、push、pull、分支合并全流程5.1 每天三次的“存钱罐”操作add、commit、push版本管理的日常其实特别简单改代码、存代码、传代码。我把这套操作戏称为“存钱罐流程”git add . # 1. 把当前所有改动放进购物车 git commit -m 完成搜索页面的前端交互 # 2. 结账打包生成提交记录 git push # 3. 把本次提交推到云端来自我的个人习惯不要一天改了一堆东西后唯一一次提交要尽量用小步提交。每完成一个功能点、每修完一个bug、每调整完一个样式就提交一次。这样当某次改动出了问题时你能用git log精准定位到是哪次提交引入的问题然后把那一行git revert回去。如果所有改动都挤在一个大提交里回滚既困难又痛苦。关于提交频率有一种纠结“代码还没写完提交了会不会不好”不会的。提交只是记录当前状态不是发布。你可以提交几百次草稿状态最终只把需要的内容合并到正式分支。Git的世界里提交是廉价的、频繁的、安全的只要你提交信息写得清楚不会有任何负面影响。还有一句经验之谈请务必养成写完代码立刻提交的习惯尤其是当你准备去开会、去吃饭、甚至只是去喝口水的时候。我发生过不止一次下午改了一堆内容忘了提交晚上电脑死机强制重启看到的还是上午的代码。那种欲哭无泪的感觉体验一次就够了。5.2 本地和云端不同步了怎么办pull的正确姿势多人协作或者多设备工作时光知道push不够还要知道pull。push是把本地推送到云端pull是把云端的改动拉下来。你的日常工作流应该是git pull # 同步最新代码 git add . git commit -m 我的改动 git push这里有个经典次序问题是先pull再改还是先commit再pull我的建议是动手改代码之前先pull一次确保你在最“新”的代码基础上开始改完之后commit然后push前再pull一次避免云端有别人刚推的新内容导致冲突。如果pull之后发现云端和本地改动了同一个文件的同一个位置Git会报告冲突并用这些标记在文件里告诉你冲突双方各自的内容。处理办法就是打开文件手动决定保留哪边或两边都要然后删掉那些标记行再重新git add、git commit完成合并。这个过程会在下面分支合并部分重点展开。5.3 分支多人协作的真正武器前面我们一直用的是默认分支master有些平台默认命名为main区别只是名称。一个人开发时直接在master上干活没问题。但当你需要同时开发两个功能或者和同事在同一个项目里改动不同模块时一直共用一条分支就会各种混乱。分支的作用是给你一条独立的代码线在这个线里你随便改、随便提交、搞坏了也不会影响主线的稳定。创建一个分支并切换过去的命令是git checkout -b feature/login这行命令等价于两条命令git branch feature/login新建分支git checkout feature/login切换分支。Git分支的切换速度几乎是瞬时的因为本质上只是移动了一个指针。在分支上完成开发后需要把改动合并回主分支。经典流程如下git checkout master # 切回主分支 git pull # 先拉最新代码 git merge feature/login # 合并功能分支 git push # 推送合并结果如果合并过程中没有冲突Git会直接生成一个“合并提交”一切顺利。如果出现冲突前面说的冲突标记方法同样适用。我个人建议在合并分支之前先把feature/login分支做完最后提交再切回master去合并这样混在冲突里的信息量最小容易判断。5.4 分支合并冲突的实战案例分析来一个我真实遇到过的场景我和同事同时在修一个Python包管理相关的工具函数。我改的是函数第三行的默认参数值他改的是函数第五行的返回逻辑。我们各自的提交都没问题但合并时Git傻眼了它不知道同时改动第三行和第五行到底算不算冲突——因为两行都不在同一个位置所以Git能自动合并成功。这就要强调一个概念“内容级合并”和“文件级合并”的区别。当冲突真的发生时你打开文件会看到类似这样的结构 HEAD return retries 1 return max(retries, 3) feature/loginHEAD代表你当前所在分支的版本feature/login代表你正在合并进来的分支版本。我的处理建议先看懂两边的代码意图再决定怎么合并。如果两个改动都该保留你可以把标记删掉写一个综合性的版本。处理完后在终端执行git add标记为已解决再git commit完成本次合并。不要在冲突状态中直接关掉编辑器不提交这会让多个文件处于半合并状态后面排查起来更头疼。6. 高频场景实战IDE、多版本Python和命令行之外的玩法6.1 用IDEA新创建项目并直接拉取Git很多读者不用纯命令行干活平时都在IntelliJ IDEA、WebStorm这类IDE里写代码。好消息是这些IDE内置了Git支持可以做到图形化操作。场景一你已经有一个远端仓库现在想在新电脑上把项目拉下来。打开IDEA在欢迎页选择“Get from VCS”粘贴仓库地址选择本地存放目录点击CloneIDEA会自动帮你把项目下载并识别出这是一个Git仓库。之后你点工具栏上的绿色向下箭头就是pull点蓝色向上箭头就是push改动文件会直接显示在侧边栏右侧Diff窗口可以逐行查看改了什么。场景二在IDEA里创建新项目后想推送到云端。先创建一个空仓库这个步骤在网页端完成方法和前面一样然后回到IDEA选择VCS菜单和Share project on Gitee或者Share project on GitHub类似的操作项按提示关联即可。如果你更喜欢命令行也可以在项目目录下执行git init再git remote add origin完全走命令行的流程。这里我特别想提醒一句IDE自带的Git插件虽然友好但新手在IDE里遇到“merge conflict弹窗”时更容易发懵。IDEA显示冲突时会给三个选项Accept Yours、Accept Theirs、Merge。前两个是单方面保留第三个是手动合并。我强烈建议用第三个Merge选项左侧右两侧分别是两个版本中间是合并结果看着更清晰也更不容易选错。6.2 当Git遇上Python多版本管理“Python多版本管理”在热搜词里经常和Git一起出现因为很多开发者用Python写自动化脚本或爬虫项目系统Python版本又不太可控。举个例子你电脑上同时有Python3.8和Python3.11旧项目依赖3.8环境新项目想在3.11上跑。这种情况下正确的做法是用pyenv这类版本管理工具而不是每次手动改PATH。Git在这里的角色是什么呢你的虚拟环境列表不要提交到Git里但Python项目代码要。这就涉及一个非常重要的配置文件.gitignore。在项目的根目录下创建这个文件写入以下几行典型内容__pycache__/ *.pyc venv/ .env.gitignore的作用是告诉Git这些路径和文件不需要被版本控制。否则你push上去的仓库会包含一大堆缓存文件和本地虚拟环境路径既不干净还可能把本机绝对路径泄露给别人。这就是为什么很多开源Python项目的仓库里都有一个非常齐全的.gitignore模板里面覆盖了__pycache__、.pytest_cache、.idea、dist、build等常见生产和IDE产物。多版本Python环境下还有一个Git相关的好习惯在README里写清楚“Python版本要求”和“安装依赖的命令”。像requirements.txt和pyproject.toml这类依赖清单文件必须提交进仓库因为它们记录了项目的运行环境依赖。配合Git的分支你还可以维护一个python3.8分支和一个python3.11分支用两套依赖做兼容性验证——这些都是版本管理带来的额外优势。6.3 团队协作里的.gitignore与提交规范说句实在话团队协作项目真正考验人的往往不是分支合并而是乱七八糟的提交。为了让代码历史不乱我配合过的团队大多约定了一套“提交信息规范”使用feat表示新增功能、fix表示修复bug、docs表示文档变更、refactor表示重构。比如fix: 修复登录态过期后跳转错误。这种规范配合GitHub和Gitee上的PRPull Request功能能极大提升代码审查效率。.gitignore在团队场景里更是重中之重。建议项目初始化时就让所有成员共用同一份模板并且第一时间提交。如果我在review时发现有同事把本地的.idea配置或node_modules提交了我会直接指出这是给整个仓库埋雷。因为每个开发者的IDE配置都可能不同node_modules又动辄几百MB提交进Git会让每次clone和pull都痛苦不堪。7. 实用命令速查表贴墙版每次给学员培训完他们都会问老师有没有一张表能放在桌面上看这里我把高频命令分类整理好建议直接保存或打印操作场景命令含义查看状态git status查看工作区当前的改动和暂存情况查看历史git log --oneline一行式显示提交历史暂存所有改动git add .把所有改动放入暂存区提交git commit -m 说明生成一条提交记录推送git push推送到远程分支拉取git pull拉取远程更新并合并新建分支git checkout -b 分支名创建并切换分支切换分支git checkout 分支名切换现有分支合并分支git merge 分支名把指定分支合并到当前分支查看远程git remote -v查看关联的远程仓库地址回退上一个提交git revert HEAD用新提交反向撤销上一个提交放弃本地改动git checkout -- 文件名恢复到暂存区的版本这里特别解释一下git revert和git reset的区别。git revert会新生成一个提交来抵消之前的提交历史是向前推进的适合多人协作分支git reset则是把指针直接拨回某个提交会改变历史在已推送的公共分支上使用需要非常谨慎。新手期我用git reset把同事的提交搞丢过一次从此只学会了“凡已推送必用revert”。8. 我踩过的坑和现在的习惯最后分享一点掏心窝的东西。接触Git这几年我最深的体会是大部分灾难性事故其实不是Git的错是“时机”和“习惯”的错。比如在代码改动还未提交的时候强行切换到其他分支你的改动会跟着工作区一起过去导致新分支里出现了不属于它的代码再比如深夜加班、精神恍惚时执行了git checkout .把你一天的工作瞬间原地清零。这些坑没人告诉你你就得自己踩一遍。我现在的习惯是每天开工先git pull每完成一个小任务就git commit每天下班前必git push重大改动前确保已有一次commit绝不在有未提交改动时切分支任何人在公共分支上只准用git revert不准无脑git reset。这套习惯帮我挡掉了无数次“灵异事件”也让团队协作变得异常清爽。如果你刚看完这篇教程我建议你马上做的事就是打开命令行执行git --version确认环境然后去Gitee建第一个私有仓库把你手上最想保护好的一份代码推上去。说真的你只需要完成第一次push剩下的所有高级功能都会顺着流程自然遇到、自然学会。那个从“压缩包版本地狱”里解脱出来的运营切入口就在你敲下git push -u origin master这一行字符的瞬间。祝你早日把版本库变成你的时间机器把云端仓库变成你的异地保险柜。
返回列表