Gitlab 使用总结
总体来说Gitlab是一个很不好理解的代码版本工具,但是为了工作更高效还是把它疏通了一遍,至于怎么注册Gitlab和配置ssh密匙这个就不多赘述了,网上教程很多,可自行Google。
一,Gitlab的三区和两个概念Gitlab:
所谓三个区是指工作区,暂存区以及head区,工作区自然就是指你本地工作的目录,这时候你和Gitlab关联后就成了工作区,暂存区是当你git add 的时候,会把你的内容提交到暂存区,当你git commit的时候会把暂存区的内容提交到head区,这时候就可以推到远端了。两个概念是指本地和远端,本地是指你工作的host,远端是指你代码要存放的git区。你把代码commit后只是在head区,并没提交到远端,只有当push后才会上传都远端。
二,Gitlab的工作流程:
1,Gitlab的初始化,Gitlab有两种初始化方式,①你可以用git clone URL 直接把你想拉取的分支clone到本地目标,这样自然会关联上。②当你不想git clone的时候,你可以在你本地的目标下执行git init指令,这时候会在你工作目录下生成.git文件,这里面会记录一些东西,如果你想精通git的具体执行流程,建议.git具体的内容可以进去查看。
2,Gitlab的添加想要submit的文件到暂存区,这时候执行git add [file]即可提交你想提交的文件到暂存区,当然git add支持通配符添加方式,比如 git add t* 把所有t开头的文件提交。
3,Gitlab把缓存区的内容提交到head区,执行git commit 在 git commit的时候可以用-m添加一些说明,比如git commit -m “first submit”。
4,Gitlab和远程关联,和远程关联有两种操作,可以用URL或者ssh,这里以URL为例,执行git remote add “shotname” url,其中shotname你可以理解为一个类,你创建了一个类,你的分支就是对象。
5,上传head区到远端,执行git remote “shotname” “分支名” 既可把shotname下的分支上传到gitlab的远端仓库。可以理解为类的某个对象上传到远端。
三,如果你没有什么骚操作,二就基本可以满足要求了,下面可以理解为进阶:
1,git branch指令
①:git branch -b dev(dev 代表分支名字),为创建新的分支并转到该分支
②:git branch -d dev 删除dev的本地分支
③:git branch -d -r 删除本地关联的远程分支
④:git branch -a 查看所有分支
2,git push指令
①:git push shotname dev 把shotname下的dev分支推到远端
②:git push shotname :“远端分支名字” 删除远端分支,可以理解为推送一个空的分支到远端分支,自然就是删除了。
③:git push --all shotname 推送shotname下所有分支到远端
④:git push --force shotname 有时候本地比远端版本低的时候你git push会提示你先git pull来更新本地,但是你想强推就用git push --force shotname,不建议使用。
⑤:git push -u shotname dev 当本地目标和多个远端多个工程关联时候,需要用-u 指定当前为默认主关联。
3,git rm指令git rm ‘file’ 从暂存区和工作区删除文件。
git rm --cached ‘file’ 只从缓存区删除文件。
4,git reset指令
git reset [–soft | --mixed | --hard] [HEAD]
--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
--soft 参数用于回退到某个版本:$ git reset --soft HEAD~3 # 回退上上上一个版本。
-hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
git reset –hard HEAD~3 # 回退上上上一个版本
git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
git reset --hard origin/master # 将本地的状态回退到和远程的一样
5,其他指令
①:git diff 比较文件的不同,即暂存区和工作区的差异。
②:git status 查看文件状态, 查看文件哪里做了改变。
四,关于分支的一些总结:
Gitlab的总体是以project的理念写的,一个project有很多人员开发,这时候需要一个主轴,这个主轴就是master分支。当你需要开发一个功能的时候,你需要新建一个分支(dev),记作时间T0,你的分支dev就一个时间节点, 你就只能看到master在T0之前的内容,因为你的时间节点为master主轴的T0时间点,这时候你可以修改一些东西,或者新建一些东西,等你的工作做完,你就可以申请合并到master主轴上,这时候你的分支就失去意义了。这些记忆的功能都由.git下的各个文件夹完成,每次commit的时候它会为每个文件夹分配一个指针,如果这个文件被修改了,那它会重新分配一个指针,没修过就用原来的指针,新建的文件就新分配指针,这时候算是一次快照完成,所以执行的git diff,git status等指令都是对比前后指针的差异来完成,回滚版本也是同样如此,而且是只能以时间点回滚,因为只记录了某次提交的指针。