git看这篇文章就够了
git是一个分布式版本管理工具,和SVN不同的是git把更多的内容放在了本地仓库,让本地仓库有了更多的权限,从而不占用网络资源快速地在本地创建各种版本信息,在最终确定版本之后进行统一地推送,提高了版本管理效率,减轻了网络资源负担。如下图 : 每个计算机都拥有一个独立的版本库,通过 pull 和 push 等操作对线上进行保存。
同时git的线上仓库(或者叫开源社区)也日渐成熟,国内有 gitee
, 国际上有 github
,都可以免费地对私人代码进行远程托管 ,当然因为网络限制所以github速度有些感人,网络条件不好的小伙伴推荐使用gitee。 这些线上的开源社区中也存在大量的代码供我们学习交流使用,我们也可以开源属于我们的代码,进入一个更大的世界。
概念上的东西大概说到这里,这些倒是很简单的东西,大家看过理解并记忆就好了。
git版本管理工具的完全使用应以一下几部分内容为核心学习目标,渐进式进行学习 :
- 本地仓库
- 远程仓库
- 分支管理
- 多人协作
before : gitbash 工具初始配置
这一步操作可以是说是至关重要的,因为我们需要告知gitbash你的基本信息,便于gitbash去进行记录,在必要的时候进行使用,请注意这项配置是必须的, 但是初始配置我们只需要配置一次即可,配置的目标是将用户名和用户邮箱放在全局的配置文件之中。
配置方式:
// 配置全局用户名
$ git config --global user.name "HuaiZhi"
// 配置全局邮箱号
$ git config --global user.email "123456@qq.com"
tip : 如果在以后的使用中出现了带有 place tell me who you are
这样的报错,那么就是这两个全局内容没有正确配置,请检查单词是否输入错误,并重新按照以上方法进行设置。
part1 : 本地仓库
本小节的学习大体上分成两个部分,第一部分是如何在本地仓库创建,还原版本,第二部分是要查看本地仓库的基本状态,便于分辨需要进行的操作。
先用一张图来说明本地仓库我们需要了解的概念。 工作区
、暂存区
还有 本地仓库
。
不要对陌生的名词感觉到恐惧从而敬而远之,因为这些词往往来自于我们最最基础和简单的代码之中,是最常见的事物。首先需要声明的是,这三个东西对于开发人员完全是没有必要查看的,所以我们暂时将其理解为三个概念性的内容,虽然他可以在隐藏文件夹之中找到其本身但是这不是本节课讨论的目标,所以暂时不表,你只需要记住这几个内容的作用就可以了。
工作区 | workspace
其实工作区说白了就是我们看得见摸得着可以更改的代码, 基于后面版本的概念我们才会独立出这样一个新的名词,所以这个是最容易理解的东西即:你所能看到,可以更改的代码即为工作区
暂存区 | index
这个地方是用于存储索引的,用于决定哪些文件需要进行版本管理,哪些不需要。因为在项目中我们确实不需要把所有内容都放进版本仓库之中,版本仓库应该只存储我们项目中改变的代码,而一些工具类内容则不需要放入其中,因为工具是稳定且不变的。比如 node_modules
包之中的内容,我们会 用一个 .gitignore
配置文件进行忽略。
本地仓库 | repository
这个是储存代码和生成版本的地方,位于本机硬盘。
基本概念结束了,我们来看一下,如何将你的代码保存在本地仓库之中那 ?
1.首先你需要一个本地仓库
我们的版本管理系统是以文件夹 (项目)为单位进行版本管理的,所以我们建立的仓库应该在项目的根目录之中 :
---| project
xxx.html
xxx.js
xxx.xx
先使用gitbash命令行进入到对应的 project 文件夹,然后进行初始化仓库的操作。
$ git init
这个操作会创建一个隐藏文件夹, 这个隐藏文件夹是本仓库版本管理系统的全部文件,删除之后可以重新建立新的仓库,当然也意味着本机的所有版本信息,暂存信息,全部消失。不建议在日常操作中删除该文件夹,请在必要时刻执行删除操作
初始化之后会在你的根目录中生成如下隐藏文件夹
---| project
xxx.html
xxx.js
xxx.xx
---| .git
2.然后选择需要进行版本控制的文件,将这些文件放入暂存区
指令,将全部文件放入暂存区:
$ git add -A
当然我们可以通过在项目中创建 .gitignore
来规定不需要版本管理的文件夹或者文件,对必要内容进行忽略
---| project
xxx.html
xxx.js
xxx.xx
.gitignore
---| .git
.gitignore
node_modules/ 这种语法可以忽略文该文件夹下所有内容
*.zip 这种语法可以忽略 *.zip 后缀的所有内容
index.html 当然可以直接编写文件全程
当然这个配置是根据你个人需求来进行配置的。
tip : 我们选用 git add 指令配合 .gitignore 就是为了节约我们的使用成本,说白了配置一次就可以一劳永逸,这也是目前的主流添加暂存区方式。 当然更多指令可以使用 git add --help 配合文档进行查看。
3. 版本提交
已经决定了哪些文件是可以进行版本管理的,那么之后我们便可以对在暂存区中的内容进行提交并生成一个本地仓库之中的版本,注意在此之前我们是没有在本地仓库产生一个版本的。
git commit -m "提交注释:这个注释为必须 ,在注释中你要写明你做了哪些改动,因为在版本达到一定数量级的时候,你是无法通过版本号分辨版本的,只能通过注释分辨版本"
ok ,如果此时提交成功,那么恭喜你,你已经得到了你的第一个版本了。 这个版本的号码由一个哈希值来标明。
什么是版本
其实我们把版本理解成游戏的存档即可,在打boss之前我们可能有大概率无法通关,但是如果不存档意味着游戏从头再来,这就是传说中的版本,如果你不玩游戏没法快速理解存档的含义的话,这里还有一个更为通俗的解释。
你有穿越时间的能力, 可以无限的返回某个时间点,对位置进行无限试错,想一想是不是很爽。 比如你兜里揣着两块钱站在彩票店门口,买了彩票发现没有中奖,怎么办,时间倒流回到你进入彩票站的那一刻,然后重新购买彩票。那么我们把可还原的,进入彩票站的那一刻叫做一个时间节点。在开发过程之中对于代码来说,这可能就是一个具体的版本。
ps: 本来是在搜索关于时间静止的图片,但是搜出来的图片过于** , 请未成年人不要轻易搜索
4. 信息查看
$ git status
这个指令是查看已经加入暂存区中的内容和工作区内容是否存在差异。
$ git reflog
这个指令是查看全部已经产生的版本
通过上述指令可以查看当前工作区中三个部分的状态及任务。
小练习:
- 更改一下工作区任意内容,然后再去输入
git status
查看输出内容。 - git add 将所有内容添加进暂存区之后再去
git status
查看内容。
5. 版本还原
版本还原前提是你必须在本地仓库之中拥有这个版本,我见过最神仙的操作就是刚刚建立好git仓库然后直接把全部项目代码删除了,居然还想要还原 。
如此机智 , 能活这么大不容易啊。
好了我们说下基本的版本还原知识,如果经历了多次版本提交,git reflog
大概会产生如下列表:
前面那个黄黄的神秘代码是什么那 ? 没错他就是 版本号,这个版本号是唯一的,这里以七位数的哈希值进行显示,如果我们要回到某个版本的话,可以根据这个代码进行版本回退,当然回退本身也会产生版本哦
ok,回退的指令是 :
$ git reset --hard 版本号
或者回退上一个版本 :
$ git reset --hard HEAD^ 一个 ^ 符号代表的就是上一个版本两个 ^ 则代表上上个版本以此类推
个人不建议使用第二种回退方式,这种回退方式比较不精准在连续操作中因为回退产生的版本会对版本造成影响,所以不建议使用这种回退方法。
用一张图来总结一下本地仓库 :
指令非常简单 : add
,commit
,reset
共三个,如果你了解了全部概念结合下图,很容易可以学会git工具本地的使用了。
part2 :远程仓库
其实远程仓库就是一个远端的云盘, 这个云盘完整的复制了你的git版本仓库,那么远端在哪那? 本章节分成两个部分。 推送
和拉取
推送
1. 创建远程仓库
在创建远程仓库的时候,有两个选择,gitee
or github
。
如果考虑效率,并且英文不是很好的小伙伴建议使用 gitee
,因为 github
是全中文的。
请点开链接后自行感受一下,然后再决定选择哪一个,注册结束后登陆并来到主页等待创建一个远程仓库。
- 新建远程仓库
- 填写必要信息
到此为止,你已经拥有了一个属于你的远程仓库了。
2. 提交远程仓库
- 按照上一章节学习内容创建你的本地仓库,创建结束之后在此进行远程仓库链接简写。
git remote add origin 你的仓库的名字
这个表示给远程仓库 命名为 origin 以后提交的时候这个链接也可以直接使用 origin代替。当然除了origin你还可以随意取名,比如说 o , ori , myOrigin .... 发挥你的想象力,这个只是一个变量名而已。
- 然后你就可以吧本地仓库中的所有版本内容推送到线上了。
git push -u origin master
在这里 origin
是我们在remote add
时添加的远程仓库名称,master
是分支,我们会在后面章节对分支进行讲解。
如果在这里提示输入账号密码,正常输入账号密码即可。
到了这里你可以在线上仓库刷新一下,并看到,你的项目已经提交上去了。
拉取
如果我们更换电脑或则新加入一个别人完成了一部分的项目,这个时候我们要先得到项目远程仓库之中的代码,来进行继续的开发,那么这个时候我们就需要从远程仓库对代码进行拉取,从而得到之前的代码,版本信息和分支,以便于继续进行开发。
拉取分成三种形态即为 clone
, pull
, fork
, 这三种拉取方式在用途方面的区分也比较明确,下面我们来看一下这几个拉取方式的区别。
**1. clone操作 **
我们来看一下clone的示意图 :
clone 操作会将线上仓库完整拉取到本地,也就是说你会得到一个和线上一模一样的项目,同时clone操作会建立一个项目文件夹对项目进行包裹。
我们建议 : 在创建仓库的初期使用clone操作,拉取完整线上代码便于继续开发
指令为 :
$ git clone 仓库地址
2.pull 拉取操作
pull操作会将远程仓库的最新代码放入工作区,如果有冲突的话会优先 自动合并(auto merge), 如果自动合并失效,需要手动合并,我们可以根据VSCODE
自带工具进行手动合并。但是请注意,如果pull之后 自动合并成功会产生一个新的版本,但是手动合并则不会产生新的版本,需要自行提交之后才会产生新的版本。也就是说,手动合并之后我们需要重复 add
commit
操作,确保本地仓库产生版本之后再做后续擦操作。
pull操作我们在开发时通常会在两种情况下执行 :
在新的一天开始时,不知是否有人更新过代码,那么我们在开发之前应该先执行以下
git pull
再进行今天的开发。-
在工作结束准备提交代码的时候,我们在
push
之前应该也先pull
拉取最新代码,进行合并之后进行提交。对了请各位小伙伴务必注意不要随意使用
push --force
指令进行强制提交,这样的话会覆盖团队中其他小伙伴的代码哦。道路千万条,安全第一条,push
不规范,亲人两行泪
tip : 所有的pull操作其实都是建立在多人协作开发时我们才会存在线上代码和本地代码不一致的情况,如果你的项目开发人员只有你一个人的话,那么则不用考虑上述两条pull指令。
pull指令 :
git pull 仓库地址(可选,默认拉取仓库origin之中的代码)
3.fork操作
fork操作示意图
总的来说,这是一种,开源项目协作方式,简单来说就是你有个项目想要更多的陌生开发人员来帮忙一起开发,你耕田来我织布,那么这个时候用到fork可能再合适不过了。 或者你看到别人的优秀项目想要保存在自己的仓库之中方便阅读下源码,那么fork也在适合不过你了, 不建议在工作环境下使用fork,因为其效率较为底下。但是对于没有操作权限的仓库来说,我们想要进行二次开发,那么fork则作为唯一的方式进行开发。
说白了fork就是 自己复制了一份别人的代码到自己的仓库里,自己玩,玩的开心了,帮人家改了bug了那么你需要跟人家沟通,你代码错了,我要提交一个修改bug的方案, 那么这个时候 在你更改好的仓库之中,远程操作提交一个pull request,然后由项目的负责人来决定是否将你的代码放入他的开源项目之中,如果放入了,那么你就是贡献者之一了哦。
当然这些操作不涉及命令行,指令还是原来的指令,只不过需要你在远程仓库的界面上点击 fork按钮就可以了。然后在本地 clone
, 开发 , add
, commit
, push
, 心情好了提交一个 pull request
ok,到此为止本章节已经结束了,我们已经完成了git工具的初步学习,本章节已经说明git工具本地仓库概念和使用以及远程仓库概念及n中提交方式。