git 使用 从小白到大神的进阶路

20 篇文章 0 订阅

前进的路上从来不缺牛逼的人!!!!!!!!!

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下

集中式和分布式的区别:

先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

 

集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。

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

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

开始学习git

1》安装

    1. linux上安装git

        先输入git 看看系统是否安装git  如果没有  命令:yum install git

    2. windows上安装git

        下载地址:https://git-scm.com/download/win   直接安装就ok 

        

git config --global user.name "Your Name"
git config --global user.email "email@example.com"


git config命令的 --global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
相当于给自己的git起个名字  注册个邮箱

2》版本库

    1. 新建

          一个空目录,进去目录里,执行git init  这时目录下会有一个.git目录,则代表新建版本库成功,如果找不到可能是被隐藏了,这个问题自己解决

    2.简单练习下添加文件并提交到自己的版本库

      1) 新建一个文件  test.txt

      2) git add test.txt  把文件添加到暂存区(可以理解为文件到版本库中需要经过的缓存区)

          git add .  是把目录下所有文件添加到暂存区

      3)git commit -m "写一个这次提交的简单说明"  这样我们就把文件提交到了版本库里

3》为我们自己犯下的错买单命令

    1. git status 使用场景

        1)我们修改完文件还没有添加到暂存区时(修改完后好长时间了忘记修改什么了)  这时我们可以使用git status查看我们都修改哪个文件了   modified: 文件名

         2) 我们修改完文件并且添加到了暂存区 这时用git status查看 Changes to be committed则有提示我们应该把暂存区的文件提交到版本库了

         3)我们修改完文件后执行了git add  和 git commit后   用git status 查看有提示nothing to commit, working directory clean  说明我们的工作区是干净的  没有需要提交的

      2. 版本回退  命令 git log  git rest --hard

         1)  在工作区里每次的git commit -m '这次提交的简要说明' 都会生成一个版本 我们可以通过git log查看 包括的信息(commit:提交的一个唯一码id   Author:提交者 Date:提交日期   还有-m的简要说明信息)

           2)如果要回退到任意版本  执行命令  git rest --hard (commit码的前六位或更多位) 如果要回退到上一个版本  执行快捷命令 git rest --hard HEAD^  如果又想回去了  则执行命令git reflog 则可看到每次执行命令的id  再用git rest --hard (commit码的前六位)再回到自己想到的步骤里

       3. 撤销修改 命令:git checkout -- file

            1)我们在工作区修改了文件  想要撤回  两种情形,第一,在工作区修改了文件还没添加到暂存区,这是想要撤销修改则用命令git checkout -- file就会撤回到修改前  第二,在工作区修改了文件并添加到了暂存区 还没提交版本库 这时文件又做了修改 想要撤回  用命令git checkout -- file 则会撤销到和暂存区里一样  总之,这个命令是让这个文件回到最近一次git commitgit add时的状态

           2)如果我们在工作区里修改了文件 并且添加到了暂存区里  这时我们想要撤回  先用命令git rest --hard HEAD file把文件从暂存区里撤回,再用git checkout -- file把修改也撤回

           经过这样撤销   世界都会太平

        4. 删除文件  git rm file

            1) 删除文件  git rm file  git commit -m '提交说明'   则会删除工作区里以及版本库里的文件

            2)删除容易  关键是恢复  如果我们用rm file 删除了文件  这时可以用 git checkout -- file从版本库里恢复文件  如果用命令git rm file  git commit -m '提交说明' 把文件从版本库里也删除了  则只能用版本回退命令撤回 git rest --hard (commit码的前六位或更多位)

 4》 远程仓库

        1. 何为分布式版本控制,就是我们本地都有自己的版本库。为了更好的代码管理,我们需要一个版本库24小时一直运行着,这市就产生了远程仓库(也是一个版本库)我们讲解以github为主,如果要想自己搭建版本库参考链接https://blog.csdn.net/yilukuangpao/article/details/53560472

         2. 首先注册一个github账号,在自己电脑里运行 ssh-keygen -t rsa -C "youremail@example.com"生成公钥和私钥,在github上找到设置里的ssh keys 把自己本地的公钥id_rsa.pub放到上边  创建一个版本库“Create a new repo”在自己本地版本库里运行git remote add origin git@github.com:yonghuming/banbenku.git 这句命令是把自己本地版本库和远程库链接起来了,并且起了个名字origin(这个可以自己定义,默认用origin) 接下来就可以用git push -u origin master 把本地的版本库推送到远程仓库(注意:-u为第一次推送需加,不要太在意这个参数,就是把本地仓库内容推上去,并且把本地master主分支和远程关联起来)

        3. 也可以先建远程仓库,然后在本地执行git clone git@github.com:yonghuming/banbenku.git克隆本地库

5》分支管理

    1. 创建与合并分支

        创建分支命令:git branch dev

        查看所有分支:git branch (分支前带星号*的就是当前分支)

        切换分支: git checkout dev

        删除分支:git branch -d dev

        创建并切换分支: git checkout -b dev

        合并分支:正常会切换到master分支  执行 git merge dev即把dev分支和master分支进行了合并

        合并时有一个快速合并git merge dev 直接合并,实际操作是直接把指针指向dev的最新一次commit,另外一个是不用快速合并git merge --no-ff -m '提示信息' dev 这样合并实际操作是相当于在master上做了一次git commit,git log可以看到比快速合并多一次commit信息

    2. 解决冲突

        有冲突是很正常的,解决冲突需要手工解决,冲突是由于两个人同时操作了一个文件,在合并时发现同一个文件修改了两个地方,git不知道你是要保留那处修改,所以Git会抛出一个冲突,让用户自己决定,手工修改完后,再次提交就OK

      为防止在开发中出现冲突,尽可能多人不要同时修改一个文件,自己开发自己的模块就ok,有关联的要相互沟通谁来开发,并且每天早上要把最新代码拉取,半天或一天进行一次提交合并。

    3. 分支使用及一些问题

       1)修改bug分支,场景:现在正在开发项目中的某一个模块,离开发ok还差一段时间,现在还不能提交。这时接到一个bug修复任务,需要及时修复。这时我们的做法如下

           1> 思路:需要先把现在dev的开发环境进行封存(如果不封存的结果就是你把bug分支修改完成后,并且合并到了主分支,然后再回到dev分支时,会发现原来修改的内容都不见了,新建的文件是存在的),然后再开一个分支进行bug修复。

            2>实现过程:封存开发环境:git stash

                                  新建bug分支开发:git checkout -b bug

                                  在bug分支上修改完后:git add file     git commit -m '修复bug'

                                  切换到master分支进行合并:git checkout master      git merge bug

                                  bug分支就是为了修改bug而建,修复完后删除bug分支:git branch -d  bug

                                  再次切换到dev分支进行解封继续开发:git checkout dev

                                  解封:git stash apply    删除stash这次记录:git stash drop   两个命令的结合命令为:git stash pop

                    额外命令:查看stash:git stash list

          2)新功能分支,场景:经理派发了一个功能,你开了一个分支gn在开发,当一切ok时git add . git commit -m 'ok'  准备切换到主分支合并时  产品经理后来觉得这个功能不合适,不要了。我们就白干了,火恼的想打人了,可是为了几个破钱也得忍者啊。这是用git branch -d gn删除gn分支时   却报gn分支还没合并 无法删除,代码也tmd找事,这时就得用大招了 git branch -D gn强制删除gn分支了

          3)在本地库和远程库之间推送出现的一些问题及命令

             查看远程信息:git remote -v

             推送分支:git push origin  master(分支上的所有本地提交推送到远程库)

         4)远程推送分支的冲突场景:两个同事:同事1,同事2。两个人都将远程库的代码git clone到本地了,这时本地两个人都只有一个分支master主分支,同事1要开发,自己新建远程分支dev到本地(git checkout -b dev origin/dev),同事1开发完后git add file   git commit -m '提交1'  git push origin dev    同事2 新建了一个本地分支(git checkout -b dev),也对同一个文件做了修改  他在提交推送的时候就报错了,推送失败,最新提交和你试图推送的提交有冲突  提示先git pull先拉取下来,可是git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接 命令:

git branch --set-upstream-to=origin/dev dev

再次使用git pull 这次报冲突,打开冲突文件修改再次提交推送就ok了

6》标签管理

     1. 使用场景

        我们在开发中会发布版本,我们不用把所有代码都复制一遍,再写一个版本号,git提供了很好的标签工具,我们只要给某次的提交commit打一个标签形成一个版本就OK

这张图是tp5的版本管理,大版本用分支管理,小版本用标签管理

   2.标签使用

       1)新建标签:git tag V1.0  (默认标签是打在最新提交的commit上的)

       2)  给上周的某一次提交打标签:首先用git log 找到上周的提交,然后 git tag V0.8 (commit ID)

       3)  打一个带有说明的标签 git tag -a V2.0 -m "说明" (commit ID)   (-a 标签名   -m 标签说明)

       4)查看标签:git tag

       5)  查看指定标签的信息:  git show 标签名

       6)删除标签: git tag -d 标签名    (只是删除了本地的标签)

       7)删除远程标签:git push origin :refs/tags/标签名

       8)推送标签到远程库:git push origin 标签名

       9)  把全部没有推送的标签都推送到远程库: git push origin --tags

7》git 的一些特殊功能

    1. 忽略特殊文件

         在开发中,我们会遇到有些配置文件是不需要推送到版本库的,这时我们需要把这些文件加入到一个.gitignore文件中。

        1)在工作区的更目录下新建一个.gitignore文件,把需要忽略的文件名放进去(一行一个  如果有一类后缀的可以用*.txt类似表示)

         2)把文件.gitignore 推送到版本库就ok

         3)如果要强制添加某个文件推送时  需要git add -f file           可以查看某个文件为什么添加不上,是那条忽略规则起的作用:git check-ignore -v file

     2. 配置别名

        有些命令特别长不好记,我们可以用起别名的方法来做,比如:git branch    我们可以通过命令 git config --global alias.bh branch ,这样我们就可以用git bh 来替代git branch       git rest HEAD file 用命令 git config --global alias.unstage 'rest HEAD'   我们就可以用git unstage file来代替 git rest HEAD file

        其实所有的命令都是写到了.git/config文件里,如果我们不要哪个别名了  打开文件直接删掉就ok

 

 

此文章参考链接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 好了  git 的使用就先告一段落,欢迎各位git友前来观看,学习和指点。如有错误的地方,希望能够提出!!!非常感谢

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yilukuangpao

你的鼓励是我创造最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值