Git使用心得

一 Git是什么

  Git是目前世界上最先进的分布式版本控制系统。

  工作原理 / 流程:

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

二 Git与SVN区别

  SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。

Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

三 Git操作

  1 创建版本库

  这里我在windows下操作,先下载git一步步安装即可,这里我已经安装好了就不展示,简单在桌面创建一个空文件夹repo,实验结束删除。

  通过git bash打开控制台,使用命令 git init 把这个目录变成git可以管理的仓库,如下:

  

  这时候当前目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。如下:

  

  我在版本库目录下新建一个记事本文件 readme.txt 内容如下:operation_11

  第一步:使用命令 git add readme.txt添加到暂存区里面去。即将readme.txt文件交给git去管理(监控文件改变),此时还未将readme.txt文件加入到版本库

  第二步:用命令 git commit告诉Git,把文件提交到仓库,生产第一代的版本库

  

 

  现在我们已经提交了一个readme.txt文件了,我们下面可以通过命令git status来查看是否文件在第一代的版本上有修改,这里是没有

 

   

 

  说明没有任何文件未提交,但是我现在继续来改下readme.txt内容,比如我在下面添加一行operation_22,继续使用git status来查看下结果

 

   

 

 

   上面的命令告诉我们 readme.txt文件已被修改,但是未被提交的修改。即未添加到版本控制里面

  git diff readme.txt 查看文件变化得地方

  

  我们继续将文件提交到版本库,交给git帮我们管理

    

 

 

  下面我们在在文件中添加operation_33添加到版本控制中,

  git log –-pretty=oneline 来查看已有的版本,这里我们看到三次提交

  

 

  那么当我们不想要readme.txt文件中含有operation_33时,我们需要使用到版本回退

  git reset --hard 版本id 跳到指定的版本,这里我们跳到第二个版本,并查看版本

 

   

  我们已经到第二个版本里面,且readme文件里面有没有了operation_33

 

 

  那么此我们又想回到第三个版本怎么办

  使用git log --pretty=oneline 产看不到第三个版本的id号,我们需要使用git reflog  获取版本号,并将版本切换到第三个版本,此时readme文件里面的operation_33又回来了

   

 

  2 工作区与暂存区的区别

 

  工作区即我们使用git init命令初始化的文件夹,我们可以在里面进行各种操作,我们通过git add将文件添加到暂存区,使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上,这里只有一个分支master,工作中我们会有很多的分支,debug,dev,master,product等分支

  3 Git撤销修改

  比如我在readme文件中添加一个operation_44,但还未提交,此时我想将版本回退怎么办

  方法一:直接去手动删除

  方法二:git reset --hard HEAD 版本号 直接回退

  方法三:git checkout -- readme.txt 

  

 

  注意:当我们没有将使用add命令将文件添加到暂存区的时候,我们直接回退到与版本库一致,当我们使用add后再进行修改我们回退到与add后的内容

  4 远程仓库:

  我们这里使用码云(速度快),这里我们注册好后设置ssh密钥,这样提交的时候就不用输入密码了,这里我们已近设置好了,就直接拿来用。

  我们在码云上面,新建一个仓库。然后将本地库与远程仓库进行关联使用如下命令

  git remote add origin https://gitee.com/qz_zhang05/repo

  然后使用push命令将本地当前分支推送到远端的master分支,因为我这里创建的远程仓库是空的,不需要先拉去直接push成功

  git push -u origin master

  

 

 

   然后我们去码云仓库看即可看到本地内容同步完成

  

  这时候我们在本地的仓库就可以向远端仓库推送了

  我们如何从码云上拉取项目?在我们有权限的时候,直接使用

  git clone 码云地址

  我们在本地桌面新建文件夹test 并在里面打开git bash 控制台 使用git clone https://gitee.com/qz_zhang05/repo.git 即可拉取

  

 

 

   5 分支:

  git中我们可以有多个分支,head指向当前分支

  git checkout -b 分支名, 新建分支并将head切换到该分支

  git branch 查看所有分支

  git checkout 分支名  切换分支

  

 

  当前分支为dev 标识为绿色,前面有星号。

  我们在dev分支上readme文件中添加 operation_44 并提交版本控制

  再切换回master分支使用cat查看readme文件可以发现是没有operation_44的

  

 

 

   此时我们想将dev分支内容与master分支合并怎么办?

  git merge dev  当前分支合并dev

  使用cat查看readme文件,可以发现operation_44

  

  合并完成我们可以删除dev分支了

 

 

  git branch -d dev

  查看分支

  git branch

    

  但是合并分支不总是一帆风顺,如果出现冲突怎么办?

  我们新建分支dev并在readme上面添加operation_55 提交版本控制

  

 

  回到master分支再readme文件上面田间operation_66提交版本控制

  

 

 

   现在我们在master分支上合并dev分支

  

 

  Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中<<<HEAD是指主分支修改的内容,>>>>>dev 是指dev上修改的内容,

  我们将冲突部分的内容进行修改,并重新add,提交版本即可解决冲突

  

 

  6 多人协作

  当我们从远程仓库克隆的时候本实验中git将远程的master分支拉取下拉并与本地master分支相关联

 

   远程仓库的默认名是origin

  要查看远程库的信息 使用 git remote

  要查看远程库的详细信息 使用 git remote –v

   

  推送分支

  git push origin 分支 

  将本地的当前分支(可以是master,dev等等),推送到远端的分支上面(这里的分支也可以是不同的分支)

  我这里直接推送到master分支上面了

  注意:团队合作时推送前一定要先拉去,否则会推送失败,如果有冲突,需要先合并冲突再重新推送

  

 

  我们去码云看看,发现已经成功push上去了,文件内容也和本地一致了

  

 

 

   注意:我们可以将本地的master分支,push到远端的未创建分支的。

  团队和做我们最需要解决的问题是冲突,我们下面模拟解决冲突。

  这里我们用自己的账号,在不同文件夹里面拉取项目并作修改后push到远程仓库,操作如下

  

 

 

   此时我们取码云上面查看项目内容

   

 

 

   可以看到已经同步上来了,此时我们在原来的项目桌面的repo文件夹中,修改代码并将代码提交版本库

  

 

  接下来我们进行版本推送到远端仓库,由于会存在冲突我们需要先将远端仓库的内容拉去下来,在本地将冲突解决后再进行推送

  注意:在实际开发中我们,在push前要养成先pull的习惯。

  

  这里我们可以发现出现了冲突需要我们去手动解决我们去看看readme文件

  

  我们在本地将冲突解决并提交新的版本,

  

  此时我们再进行push

 

  

  发现我们的push成功

 

  我们再去码云看看

  

  我们发现代码也成功push上来

  至此我们可以在企业中进行实际的开发了,企业一般使用idea等继承工具,能更快捷,方便的尽心git的管理,

  7 补充:

  我们实际项目中会有许多的文件不需要push到远端的仓库,比如字节码文件等等,我们可以在git中添加.gitignore文件进行忽略,被忽略的文件在push时候就不会上传到远端仓库

  忽略文件写法简单我们就不在这里进行展示了。

四 总结:

  套用网上的一组图对git常用命令进行一个总结,git还有很多其他命令,但我们不知道的时候就去查,需要多使用才能熟悉

  

 

 

 

 

 

 

    

 

 

 

 

 

 

 

 

 

 

  

 

  

  

  

  

 

posted @ 2020-10-13 17:46  下饭java学习者  阅读(122)  评论(0编辑  收藏  举报