书名镜像:
https://mp.weixin.qq.com/s/_G3l9urASsFjyrYAZBWhDg组成部分管理工作
Git中较为最重要的一点儿是组成部分的基本概念,有了组成部分就有了分拆和衍合的操作方式,「分拆」和「衍合」能「有效率的对标识符版的管理工作」。
Git的调用两条预设的主组成部分叫作master,每一场的递交单厢串起两条天数线,这是两条组成部分,现阶段组成部分由HEAD操作方式符对准:
当每天出现标识符递交的这时候,现阶段对准就会往前逐步形成两个捷伊版,倘若再创建两个捷伊组成部分bran,因此现阶段的递交对准捷伊组成部分,这种捷伊组成部分随著天数的流逝就会逐步形成很多版:
teaumeillant组成部分合作开发瘤果,递交库房,并分拆到萨温齐master,最终删掉bran组成部分,这种就顺利完成了一场对个人的合作开发:
因此,倘若主组成部分上只创建两条组成部分不然,组成部分的分拆是十分加速的,只须要终端master组成部分到现阶段递交,接着将HEAD操作方式符对准master,最终删掉bran组成部分就顺利完成了。
但是,事实上并不是这种的,在两个多人协作的合作开发团队中,往往每对个人单厢创建自己的组成部分,有自己的递交,最终分拆到萨温齐,当自己递交的这时候,远程库房标识符就会存在自己本地库房并未有的标识符,这种就会导致push失败。
例如:程序员Tom和Jerry同时迁出标识符,他们的初始标识符组成部分都如下图所示:
当Tom合作开发自己的业务模块,递交标识符因此分拆到萨温齐后,远程萨温齐组成部分如下图所示:
「远程库房master已经不再对准gs234,而是新生成了两个版dfd453,作为现阶段对准的版」。
与此同时,Jerry的本地也同时合作开发完自己的模块后,组成部分如下图所示:
在Jerry的本地环境中,他的「本地库房master还是对准gs234」,Jerry在自己新创建的两个组成部分bran中进行合作开发,合作开发瘤果分拆组成部分,最终master就会对准ed489。
当Jerry再次递交标识符,Git就会检查远程库房与Jerry的本地库房,进行对比后,发现远程库房存在Jerry的本地库房不存在的标识符,就须要Jerry将远程库房执行git pull后,自行解决冲突。
上面说了组成部分基本原理,已经管理工作组成部分出现的问题,下面我们就来一步一步的深入操作方式组成部分的基本命令。
新建组成部分
Git新建两个组成部分的命令为:git branch <组成部分名字>,新创建后分之后,切换组成部分的命令为:git checkout <组成部分名字>。
新建组成部分的实质:「是新创建两个引用,对准现阶段递交,master就好比两个引用」;切换组成部分的实质:是将HEAD由对准原来的引用,重新对准要切换的组成部分的引用上:
当然上面创建组成部分因此分拆组成部分的两条命令可以分拆成两条命令:git checkout -b <组成部分名字>
当切换分之后,每天commit递交标识符时HEAD操作方式符就会跟随著捷伊bran组成部分终端,逐步形成bran组成部分上的每两个版:
倘若,在捷伊bran组成部分上合作开发到某两个版,再次切换回master组成部分进行合作开发就会逐步形成分叉:
查看组成部分
当组成部分创建好了,你可以通过:git branch,来查看自己本地的组成部分情况:
组成部分前面带有*号的表示现阶段的组成部分,查看分之后,你就可以很清楚的知道自己要checkout哪条组成部分了。
合并组成部分
合作开发完自己模块后,后面就会在自己本地进行分拆组成部分,分拆组成部分的命令:git merge <组成部分名字>,它表示「分拆指定的组成部分到现阶段组成部分」,比如:现阶段组成部分为master,执行:git merge bran,表示分拆bran组成部分到现阶段master组成部分上。
组成部分分拆也会有失败的情况,当你的两条组成部分都修改的相同的文件,这这时候Git就无法判断你要保留哪两个修改,就会出现merge冲突。
例如:我先在master组成部分修改README.md文件,接着递交本地库房:
接着切换回组成部分dev,再次修改README.md文件,再次递交
最终进行分拆组成部分,此时在你两次修改的README.md文件中就会出现两次修改的冲突代码:
因为你两次修改同一文件的操作方式,分拆后Git并不知道你要保留哪一场的操作方式,因此它就会将这个决定交给你自己决定,它只告诉你文件中哪里的标识符冲突了,具体怎么改就由你自己去弄。
删掉组成部分
最终是删掉自己新建的组成部分,通过:git branch -d <组成部分名字>,进行删掉组成部分,倘若组成部分删掉不了,可以通过:git branch -D <组成部分名字>,强制删掉组成部分:
Git中删掉组成部分的实质:dev只是两个组成部分的引用,因此删掉组成部分也是删掉这个引用,并不会删掉任何conmit,因此删掉操作方式也是十分高效的。
倘若两条组成部分commit的引用被删掉,那么这条组成部分的就没有任何引用对准,这种就会找不到这条组成部分,最终就会被Git回收机制回收。
查看远程
在多人协作的团队下,你可能要随时查看远程库房的情况,可以通过:git remote,进行查看,加上-v参数可以查看远程库房的详细情况。
gitremote git remote -v推送组成部分
组成部分的推送到远程上一节已经提过,使用git push命令就可以进行组成部分的推送,命令后面加上组成部分的命令,表示具体推送哪条组成部分:
git push origin master // 将本地master组成部分推送到远程库拉取组成部分
组成部分的拉取使用git pull命令,这条命令相当于以下两条命令:
git fetch git merge但是一般实际工作中,都可能会直接使用git pull命令:
组成部分管理工作策略
在分拆组成部分的这时候,Git会以加速分拆的模式进行分拆(Fast forward),但是这种模式删掉组成部分后,会丢失组成部分的信息。
Git中还可以以「普通模式」进行分拆,在原来git merge命令后面加上–no-ff参数即可,分拆的命令如下:
$ git merge —no-ff -m “message” dev临时存取工作区的改动
在合作开发中,若是某一时刻你想把现阶段的改动临时进行存放起来,可以使用git stash命令,它表示将改动的文件存储到两个独立的存储区域,并不会被递交,当再次须要的这时候可以随时取出来。
这里要注意的是:「git stash的是改动的文件,也是被Git追踪的文件,新添加的文件并没有被Git追踪,因此git stash并不会stash」。
git stash命令也可以加上save命令后面再加上备注信息,方便查看:
git stash save “备注信息”git stash成功后「本地的工作目录的标识符会和本地库房一样」,git stash后可以通过git stash list命令查看之前stash的历史记录,当再次须要将改动的文件取出来这时候,可以通过以下命令:
gitstash popgit stash pop表示「弹出第两个被stash的记录,因此该stash会从历史记录中删掉」;也可以使用git stash apply命令「弹出stash,但是这条命令stash仍然会保存在stash历史记录中」,你也可以通过:git stash drop命令来删掉。
这一篇就只讲解了Git的组成部分原理以及Git的临时存取操作方式,限于篇幅,我们今天就到这里,