Git版本控制常见操作

大家好,哈哈,萍子有日子没更新博文了呢,最近真的是懒得不要不要的,然后最近萍子手里在跟进一个小程序的项目,所以就没再更新那马马虎虎的博文了,小伙伴们见谅哦~
萍子一直以来对于git的使用心里都很发怵,不太敢用,生怕会因为自己的操作不当而导致版本出现不可挽回的错误,所以在闲暇时间我又认真看了一遍廖大神的网站,认认真真的学习了一遍git版本操作,学习的时候手写在笔记本上,满满当当的写了近十页纸呢,这不又过了个五一,就快要忘没了,所以赶快过来写篇博文再温故知新一下,哈哈~
好了,闲话不再多说哇,开始学习咯。。。

Git简介

Git是目前世界上最先进的分布式版本控制系统(没有之一),其特点是操作简单明了。
那什么是版本控制系统呢?嗯~根据萍子的理解简单的说就是“保存操作版本”的过程,也就是说我们在进行项目开发的时候,总不是一次成型的,所以也就是说需要一步步的完成,这样的话,这个一步步的过程中所将要产生什么重大变化的时候,就是版本分裂的时候。再简单的说就是,比如我们操作一个项目,当一个功能开发结束了,再要进行别的功能开发的时候,这个时候为了不影响之前我们处理好的内容,所以我们可以复制粘贴出来一份,这样就是互不干扰的两个文件,这两个文件就是项目的两个版本。而且这样做最大的好处就是可以有多人同时操作,还不会影响彼此的独立操作,最后协作完成后再合并就可以了,是不是超级酷啊。



Git安装

我现在手头上用的电脑系统是windows10的系统,所以我就以windows系统作为例子去说一下。
在Windows上使用Git,可以去Git官网直接下载安装程序,然后按照默认项去安装就可以了。
安装完成后,在电脑的开始菜单中找到Git,然后点击选择Git Bash出现一个类似命令行窗口的东西,就说明Git安装成功了。
这里写图片描述
安装完成后,还需要最后设置一下,在命令行输入:

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

正如你所看到的,我们在使用Git之前,需要自报家门,不用想那么多,配置上就好了。其中–global是全局参数,后面会具体解释。



Git的使用

创建版本库

什么是版本库

版本库又名仓库,英文名repository,可以把它理解为一个目录,在这个目录的文件都可以被git管理起来,每个文件的修改、删除,git都能跟踪,以便于任何时刻都可以追踪历史操作,或者可以回退版本啊等等。

创建版本库

创建版本库的命令行操作

然后去电脑对应的位置去查看一下在不在就好了,确认一下的好习惯啊,哈哈~
这里需要注意的是,我们尽量在给目录取名字的时候不要出现中文哦。
这里写图片描述

小结:
    mkdir name  创建版本库
    cd name     切换到当前目录下
    pwd         显示当前目录所在的位置

版本库初始化为Git管理的仓库

这里写图片描述
这样瞬间就把仓库创建好了,而且会提醒我们这是一个空仓库(empty git repository),细心的小伙伴可能注意到了,提示最后面在“pingzi”的目录下多了一个.git的目录,这个目录就是用来跟踪管理版本库的,千万不要手动修改里面的文件,千万不要。如果看不到.git目录,是因为这个目录默认是隐藏的,用“ls -ah”命令就可以看见。(我不知道你们能不能看到,反正我一直没看到,笑哭,但是没关系的,看不看到无所谓,我们也不会对它进行任何操作,知道有它在保驾护航就行了)

小结:
    git init  初始化目录为git仓库

把文件添加到版本库

首先需要提醒一下小伙伴们,如果大家用的也是windows系统那就要注意了,因为某某某原因,windows系统的Microsoft的Word格式是二进制的,别的不多做解释,总之不要使用windows自带的记事本编辑任何文本文件就好了,建议下载一个Notepad++代替记事本,不但功能强大,而且免费,只需要我们把Notepad++的默认编码设置为UTF-8 without BOM即可,如下图:
修改Notepad++的编码格式
然后我们编辑一个txt文件,写一点内容在里面:
readme.txt文件
注意一定要把txt文件放在我们最开始创建的仓库中,放在其他地方可就找不到了啊。
廖大神的比喻很好,和把大象放到冰箱需要3步相比,把文件放到Git版本库只需要两步。
(1)用命令行告诉Git,把文件添加到仓库
这里写图片描述
执行上面的命令,不会有任何的提示,没关系,继续往下操作就是了。
(2)用命令行告诉Git,把文件提交到仓库
这里写图片描述
简单的解释一下git commit命令,-m后面输入的是本次提交的说明,相当于我们的注释tips,最好写一些有提示意义的内容,这样方便我们从历史记录里方便的查找改动记录。
git commit命令执行成功后会像图上那样一样,显示提示内容:1个文件被改动(我们添加的readme.txt文件),插入了两行内容(readme.txt我们写了两行内容)。

Tips:为啥Git添加文件需要add和commit两步
因为add是把文件从工作区放到暂存区,还没放到仓库中,我们可以add很多文件到暂存库,然后一并commit到仓库中。
至于工作区和暂存区后面会进行解释,先知道就好。

小结:
    git add file           把工作区的文件放到暂存区
    git commit -m "tips"   把暂存区的文件提交到仓库

修改文件,查看Git状态

经过上面的操作,我们已经创建了版本库,并且把它初始化为了Git控制的仓库,还提交了一个txt文件到仓库中,现在我们要做的就是修改这个txt文件,然后查看仓库的状态变化。
这里写图片描述
如图,我已经修改了txt文件,然后执行git status命令查看仓库的变化。
这里写图片描述
git status命令可以让我们时刻掌握仓库当前的状态,上图的命令告诉我们readme.txt文件被修改了,但是还没有提交到仓库。
另外值得一提的是git diff命令,这个命令会为我们返回我们是怎么修改文件的:
这里写图片描述
git diff,顾名思义就是查看difference,在上图中可以看出,我们在第二行添加了一句话。
这样查看过后,我们做了什么修改都了然于胸了,再进行提交到仓库就比较放心了。提交修改和提交新文件是一样的,先add再commit。在commit之前我们先git status一下,看看仓库的当前状态:
这里写图片描述
git status告诉我们,将要被提交的修改包括readme.txt。
然后我们就可以放心的commit提交到仓库了,提交后再git status一下,查看一下当前仓库的状态:
这里写图片描述
git告诉我们当前没有需要提交的修改,而且工作目录是干净的(working tree clean)。

小结:
    git status   查看工作区的状态
    git diff     查看修改的内容

Git版本回退

查看版本历史记录

当把文件修改了很多次,也提交过很多次之后,难免会忘记我们都做过那些操作,所以在这个时候我们如果想要查看我们都做过哪些修改,我们需要用git log来查看我们都对仓库修改的历史记录:
这里写图片描述
git log命令显示从最近到最远的提交日志,从上图我们可以看到两次提交,最近的一次是首次修改first change,上一次是首次提交first commit。
如果觉得输出的信息太杂乱,可以加上–pretty=oneline参数:
这里写图片描述
需要友情提示的是,我们看到的一大串commit的时候写的tips前面的字符串(哇,这句话好拗口。。。)是commit id,俗称版本号,我们可以用这个版本号的进行版本回退哦,哈哈。

版本回退操作

现在我们开始把readme.txt文件回退到上一个版本,也就是回到最初的first commit版本。
(1)查看版本状态git log
首先,Git需要清除当前版本是哪个版本,所以在Git中,用HEAD表示当前版本,也就是上图中first change前面的那一串commit id的那个版本,那么上一个版本的写法是HEAD^,上上版本的写法就是HEAD^^,要是很多的话,我们就不建议写太多^符号了,可以写成HEAD~num。
(2)版本回退git reset
现在我们把当前版本first change回退到上一个版本first commit,用到的命令行是git reset:
这里写图片描述
操作完这一步,我们可以看到命令行提示,当前的版本在first commit上,然后回到我们在Notepad++写的文件,就会有下图的变化:
这里写图片描述
点击是,版本回退就呈现出来了:
这里写图片描述
是不是超级简单的啊,哈哈~那我们现在来git log一下,看看现在版本库的状态:
这里写图片描述
正如我们所看到的,这样的话,我们就已经回退到最开始的版本了。
(3)后悔版本回退了,想再还原回去git reset –hard ‘commit id’
①能在当前命令行窗口找到commit id
版本回退后悔了,想再回退回去还是有办法的,如果命令行窗口没关闭,就可以往上找,找到在没版本回退之前的git log的位置,就可以看到first change的commit id,然后就可以回到想要回去的版本了:
比如上面有图片显示我的first change的commit id是1c6ec09……
这里写图片描述
哈哈,上图显示我们已经又回到first change的版本了哦,就像我上图写的版本号没必要写全,前几位就可以了,Git会自动找,当然也不能写的太短呐。。。
这样再查看readme.txt文件,就是这样的了:
这里写图片描述
这里写图片描述
②不能在当前命令行窗口找到commit id
当我们关闭了命令行窗口之后想再进行版本切换到未来的版本时,可以用git reflog命令,其记录了每一次的命令:
这里写图片描述
这样就可以找到我们需要回到的版本的commit id,然后对应的去穿梭就可以了,Git就是很666吧,哒哒哒~

小结:
    git log             查看提交的历史版本状态记录
    git reset           版本回退
        --hard HEAD~num    回退几个版本
        --hard commit id   回退到哪个版本
    git reflog          查看命令历史,寻找历史版本的commit id

工作区和暂存区

这个概念在前面我们就提到过,在这里乱入的解释一下。
简单的来说,仓库根目录就相当于是工作区,当我们需要提交到版本库的时候,可以使用git add把工作区的一个或多个内容放到stage暂存区中,之后用git commit -m “tips”一并提交到版本库中。
图解:
(1)工作区
就是说我们一开始创建了readme.txt文件在我的根目录pingzi中是这样的:
这里写图片描述
(2)暂存区
执行了git add之后:
这里写图片描述
(3)仓库
执行了git commit之后:
这里写图片描述
看了以上图解是不是很清晰明了了呢,O(∩_∩)O哈哈~


管理修改

前面我们已经说过了,修改过的文件,需要add和commit才能提交到版本库里,可是大家要明白,我们使用Git管理的是修改,而不是文件本身。
这里有三种情况:
(1)修改完文件,进行add和commit
这样是可以改变版本库内容的。
这种情况我们上面已经介绍过了,在这里就不再赘述了。
(2)修改文件,直接commit
这样改变不了版本库的内容。
这里写图片描述
上图所示,我再次修改了readme.txt文件,git status修改的状态,确实是修改了的,但是我直接commit的时候,命令行提醒我们是没有改变添加去提交的,所以也就意味着这个改变时提交不到仓库的。
(3)修改文件,git add,然后再次进行修改,进行git commit
这样的情况的话,总结第一条和第二条就能得出结论了:第一次修改的是可以提交到仓库的,第二次不可以。

小结:
    也就是说,我们做完修改以后都要把修改git add到暂存区,
    然后再进行git commit才能改版仓库的内容,否则是改变不了仓库内容的,
    这也就说明了Git管理的是修改而不是文件。

撤销修改

当我们修改了文件,但是总会有修改错误不完善的时候,这个时候我们就需要进行撤销修改,以避免咋成什么不太好的后果。
撤销修改的位置,大致又三个位置,其实是有第四个的,但是如果你操作到了第四步就真的没救了。。。
(1)只在工作区修改了文件,没放到暂存区
正如我们所能想到的,既然是我们手动修改的文件,我们再手动给它删除不就行了嘛?当然了,当然可以。但是我们git status一下你会发现git checkout –fileName可以丢弃工作区的修改:
就比如刚刚,我在文件中添加了“佛系少女”几个字,git status出来,就有命令行提示呐,你看~
这里写图片描述
(2)修改了文件,git add到了暂存区
这样的话,需要两步才可以删除修改:
首先,git reset HEAD readme.txt 把暂存区的内容还给工作区
然后,git checkout –readme.txt 还原文件
(3)修改文件,git add到了暂存区,git commit到了仓库
如果已经提交到了仓库,就需要三步了:
首先,git reset –hard HEAD^ 版本回退当上一个版本
其次,git reset HEAD readme.txt 把暂存区的内容还给工作区
最后,git checkout –readme.txt 还原文件
(4)那如果你很厉害,666的就把修改内容一路推送到了远程上,那就真的没办法了,哈哈哈哈,所以要谨慎哟。。。

小结:
    git reset HEAD fileName  把暂存区的内容还给工作区
    git checkout --fileName  还原文件

删除文件

一般我们想要删除某个文件,就可以直接手动删除,或者命令行rm fileName删除,但是删除过后,我们工作区的内容和版本库的内容就不一样了。
比如我手动把readme.txt文件删了
这里写图片描述
git status查看状态,会呈现哪些文件被删了。
这里写图片描述
那这个时候,就看我们是不是真的需要删除这个文件了。
①真的想删除,就把版本库里的文件也删掉即可
在这里我还想要我的文件呢,我就不删了啊~~

git rm file
git commit -m "delete file"

②是误删,想要再次找回来
这样的话,我们可以在版本库中找回来。
这里写图片描述
如上图所示,我们使用git checkout – readme.txt命令,之前手动删除的文件就会被找回来啦。
其实就是用版本库的内容替换工作区的版本,无论工作区是修改或者是删除,都可以使用这个命令行“一键还原”。

小结:
    git rm fileName  删除文件

远程仓库

准备工作

(1)首先我们需要借助于github,自己注册一个账号就可以免费获得Git远程仓库了。我自己是已经有github的账号了,在这里我也就不赘述了哦,哈哈~
(2)由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
①创建SSH Key
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
我的是已经配置好了的:
这里写图片描述
②登录github,设置一下即可
打开“Account settings”,“SSH Keys”页面:
这里写图片描述
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
这里写图片描述
这里写图片描述

添加远程库

我们现在的情况是本地已经有了一个Git仓库,所以需要在github上创建一个git库,让两个库进行远程同步即可,这样我们既可以备份,又可以让别人一同协作,一举多得呢。
(1)登录github,创建一个新仓库,最好名字与本地git库相同
这里写图片描述
这里写图片描述
(2)关联两个库,在本地库下运行命令
这里写图片描述
请千万注意,把上面的马赛克部分替换成你自己的GitHub账户名。
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
(3)把本地的内容推送到远程库中
这里写图片描述
操作完上图这步之后,我们的github远程库中就会有我们本地库的内容了:
这里写图片描述

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过命令把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库

 git push origin master

注意点:SSH警告
这里写图片描述

从远程库克隆

前面我们讲了先有本地库,后有远程库的时候,如何关联远程库。现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。
(1)登陆GitHub,创建一个新的仓库,名字为test
这里写图片描述
我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件:
这里写图片描述
(2)克隆
准备工作做好了,下面开始克隆远程版本库
这里写图片描述

小结:
    ssh-keygen -t rsa -C "youremail@example.com"  获取SHH密钥
    git remote add origin git@github.com:your github name/fileName.git  关联本地、远程版本库
    git clone git@github.com:your github name/fileName.git   克隆远程版本库
    ls 列出当前文件下有哪些文件内容

我的妈呀,这一片博文萍子写了好几个小时啊,希望对大家有帮助啊,还有分支管理的部分没写,以后有机会一定补上,啦啦啦~歇歇,好累好累。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值