git入门篇

 

 接着上一篇幅吹水,这里面的工作区其实就是当前使用的目录,比喻ljxgit文件夹,版本库就是add以及commit之后那些乱七八糟的东西;上一篇幅已经操作过了git的一些简单使用,下面就复盘下git的一些操作

  1. 下载与安装
  2. git config --global user.email/name  
  3. git init   对一个文件夹目录进行git初始化操作,这个初始化就是为了让git对这个文件夹中的文件进行版本管理。初始化完成之后,在当前目录下会有一个.git文件夹,这个文件夹就是我们所说的版本库。现在就可以用git对其下的文件进行一个版本的控制,就是可以对它进行一个版本的回退,回到当前等等。
  4. 接下来你的操作就是无非在这个工作区或者仓库中创建文件,然后对文件进行一系列修改操作之类的。Git的要求是,你要让git帮你进行的版本的管理,必须先有一个文件夹,这个文件夹要被git进行初始化操作,这样才能进行一个git的版本管理。

上面说到了工作区和暂存区突然让我想到了一件事,上一篇幅中说过,如果对文件 进行修改时进行git status时会有一个提示

 

 但是我们在日常开发中会有一些场景,例如自已修改了文件,但是这次不想提交到暂存区,这时候应该怎么玩,这时可以用到命令git checkout -- a.txt ,这时会撤销工作区中的一个修改,也就是说你不需要进行git add操作了。

 

 但记得这个命令会把你不提交的内容全给删除了。

接下来我要写的就是这篇幅的重点:分支

 

 关于提交,前面都说过,正常提交后线路如上图,每次提交后每有一个commitid,每次提交后会如上图进行线性连接。现在要说分支的概念,怎么讲呢,这样说吧,在c和c++中有一个指针的概念,我们在执行git reset --hard commitid之所以能回到我们对应要回滚的地方,就是因为这对应的指针位置对应了要回滚的位置,前面的返回上一版本中有个方法是HEAD^,这个命令之所以能成功也是因为正好对应上一个版本的commitid,所以由这个可以得到如果说内容已经add到暂存区,此时要想撤销的话,需要先回到最新的一个commitid上,可以用HEAD^进行回退,所以说HEAD就表示当前最新的版本的commitid,也就是最新的指针指向;这里面的HEAD头指针指的只是当前所处的版本,但是这个不是这里要说的重点,这里面还有一个Master分支是主分支,也是git为你默认创建的分支,竟然有主分支,那一定就还有其它分支概念。

 

 由上图片可知Master分支指向的是最新的提交commitid,头指向指向的是我们的master分支。但是git的强大之处远不止如此,而是有一个多人协作开发的概念。就是通过git的分支进行的。概念说完了,下面就开始进行操作了。

首先在主分支master上切出一个开发分支,比如叫”dev_ljx” ,创建分支的命令是git checkout -b dev_ljx;由下图可以看到,已经从主分支中切到了我们自己创建的分支中来了

 

 现在你进行的任何操作都是在分支上进行的,为了能够详细表达出区别,下面来做一件事,改变原文件加一句话 

 

 然后在当前分支上进行git status进行查看 

 

 会发现有一个文件修改过了。这时做一件事,把这文件进行提交了

 

 然后再次查看 

 

 这里面的操作其实和上稿中讲的都一样,唯一不同的就是所区分支不同而已,这时用git log查看下日志

 

 会发现日志中记录了所有分支的提交记录,这时我们再把分支切换到主分支,先用命令git branch查看所有分支

 

 会查到所有分支并且可以看到我们现在所处的分支位置,下面开始切分支了,用命令git checkout master切到主分支

 

 这时来个好玩的,这时再查看下主分支的日志

 

 会发现主分支上没有刚刚我们在dev_ljx分支上提交的记录,除了这个外还有个神奇的地方就是打开刚刚修改的文件,会发现刚刚修改的文件内容丢失了,但是当一切回个人分支时,又会发现刚刚修改的文件显示出来了。这说明在不同的分支上进行的版本管理,只有在自己的分支上才会生效。

分支有创建就会有删除的,如果分支现在失去作用了,要删除怎么玩,在删除之前说明删除分支的要求,如果要删除分支,你必须先切换到另的分支上才能删除,删除命令是git branch -D dev_ljx,这里再补充一个细节问题,这个删除命令中的大写的D意思是强制删除,如果不想用强制命令就用小写的d进行操作,小写的会友好点,比喻你分支忘记合并了他会报提醒

 

 再次查看分支,会发现只有一个分支了

 

 分支创建和删除已经说完了,下面再说最后一个难一点的东西就结束这个篇幅吧,最后说下分支的重难点问题,分支的合并和冲突解决,一般正规点的管理主分支master是不会去动,只会用于版本的发布。各自的开发只会在自己的分支上进行开发管管理,各自在自己的分支上开发完成之后,需要将开发的内容合并到主分支上去。这个时候成为合并内容

 

下面再来创建一个分支dev_ljx

 

 然后和之前一样修改下内容在这个分支上进行提交

 

 然后提交 

 

 然后查看日志

 

 会看到提交的内容在里面了,现在准备合并分支了,在合并前要切到主分支git checkout master

 

 切换后就开始合并了,快速合并命令是git merge  dev_ljx

 

 再次查看日志

 

 会发现主分支上也有了个人分支上的提交内容;这样看似一切完美,但是在多人开发时还是会有一点问题,前面说过master分支作为一个版本发布的分支,不应该进行直接在上面开发;假如现在有两个团队合作开发,那么这时就要起两个分支了,那再取一个分支dev_zs

 

 这时有两个分支了,现在分支在zs这边,这时zs修改了一个文件并提交了,我们还是修改a.txt文件

 

 修改完成后在自己分支上提交了

 

 这时如果ljx同时也改了同样的文件,并且也提交了会发生什么呢,接下来切到ljx分支git checkout dev_ljx

 

 然后修改同一份文件并且提交

 

 

 

 现在两个人把自己的分支都提交了,现在他们都准备合并到主分支,这时冲突就发生了,接下来,切到主分支合并git checkout master

 

 先合并zs的分支git merge dev_zs

 

 接下来再合并ljx的内容

 

 会发现报错了,这冲突意思就是说文件冲突了,这个冲突要手动解决冲突,并且再去进行add,commit的操作。

 

 

posted @ 2021-04-04 23:37  童话述说我的结局  阅读(99)  评论(0编辑  收藏  举报