很久之前听说过github,貌似是个很厉害的东东,当时也就随便找了些网上的教程配置了一下简单操作一下就搁浅了,现在突然感觉有必要真正使用github了,因为它的版本控制功能确实十分强大,参考学习了一下相关博客,这里记录一下git常用的命令,防止再次遗忘。这里的操作全部是在windows上的
repository
首先解释一下,这个是仓库,也就是版本库,他相当于一个目录,它可以用来记录跟踪文件的修改删除,首先这里创建一个文件,比如demo,之后执行git init命令,见下图,执行完后这里生成一个.git文件夹,这个文件不要修改,因为他记录着版本的变化,另外提醒一点,创建的目录最好不要带有中文
这里创建了一个word文档,与.git同级目录,里面写了一行文字,保存,之后执行如下命令
这里git add是将文件添加到暂存区,之后执行git status可以查看当前版本库的状态,这里显示有文件待提交,之后通过git commit -m “xxx” 这种格式提交到版本库,注意这里 -m参数后面跟的是备注,最好写的能让自己明白,这次提交更改了什么东西 ,以后下面如果执行add和commit命令统一用ac表示,这里add 可以执行多次,用来添加多个文件,之后通过git commit一次性提交到版本库进行控制管理
之后再次打开之前创建的test.docx文本,又添加了一行文本,之后保存,通过ac提交到版本库控制,提交完毕后通过git status可以查看工作区的变化,如果工作区提示是干净的,那么可以放心提交,如果工作区有改动,那么可以通过git diff 查看变动具体是什么
之前提交了多次commit,每次提交其实就相当于保存一个版本,这类似于玩游戏的存档一样,而且更高级的是你每次存档可以设置相关的描述,让你自己知道到底这次提交做了什么,和游戏一样,这里你可以回到任何一个版本,通过下面两个命令可以查看已经提交过的版本,第二个命令是将命令输出成一行,这里commit后面跟的是版本号,是用哈希算法算出来的,显示的是由近到远的提交
这里我又在word文档里写了一行文字,之后ac,这里HEAD表示最新版本,如果我想回退到上一个版本,那么用HEAD^来表示,这里我们git reset –hard HEAD^ 来实现。
- 在没有回退之前,通过git log显示的是下面这张图,表示有四个版本
- 执行完回退命令后,查看发现现在一共剩下三个版本了,打开word文档,查看,此时发现剩下两行文本了,也就是说成功回退,实现了版本控制
- 但是如果你又反悔了,想回到之前的那个版本,但是你看不到对应的commit id,或者说是你关闭计算机再次打开,事实上我们不可能记住每次提交对应的commit,这时候就可以通过 git reflog来查看提交过的所有id,见下图,之后通过git reset –hard 版本号回退到相应版本即可,这里一般写上前六位即可识别,这里我们回退到之前的第三版本,也就是最新版本,之后打开word文档查看,发现回到了指定版本
- 接下来说下暂存区和分支,文件一开始是放在工作目录的,之后通过add命令放入暂存区,之后通过commit放到分支,也就是版本库,在git初始化后会自动创建一个默认分支master,你所做的commit提交都是提交到这个分支,可以通过add将多个文件放入暂存区,如果仅仅是在工作目目录创建一个文件,那么他是不会被跟踪的,只有放入暂存区才可以,比如我创建了一个demo.txt,之后通过git status查看,见下图,这里显示该文本未被追踪
- 关于多次修改提交,比如我之前创建了一个demo.txt,添加一行文字12345,之后add,然后再次添加一行文字34567,然后commit,然后你通过git status查看,见下图,显示demo.txt被修改了,也许你认为正常情况下显示的是工作区是clean,也就是工作目录与版本库一致,但是你仔细看会发现,你的第二次修改并没有执行add添加到暂存区,而commit只会把添加到暂存区的内容提交到分支,也就是版本库,这样也就出现了工作区与版本库不一致的情况,可以通过git diff HEAD – demo.txt来查看最新版本库与当前工作目录的区别
- 也就是如果你多次修改,那么每次修改都要add,让其放入到暂存区,之后commit,就可以解决不一致问题了
关于工作区修改,举个例子,如果你在工作区不小心修改了某些你不想要的东西,你想撤回,但是又不记得到底修改了什么,可以通过git checkout – xx 来恢复,这里我新建了一个back.txt,里面写了这么一行,而且该文件已经被版本控制了,,执行git status命令发现文件已经被修改,工作区与版本库不一致,通过执行下面这个命令,可以回退工作区的修改,再次打开发现back.txt中没有内容了,说明回退成功(我在空白时将该文本提交版本控制)
接下来是另一个测试,如果我将back.txt添加到暂存区,此时back里面有一行数字,之后我又在本地的工作目录的back中又添加一行数字,这时候暂存区中内容和工作目录中内容不同,再次执行git checkout – back.txt可以将工作目录中该文件回退到提交到暂存区的状态,也就是一行数字的时候,执行命令后查看,发现已经回退到提交暂存区的状态。
- 如果一个文本已经被版本控制的情况下,你在工作目录添加了一段错误的话,之后add到暂存区,那么你可以通过git reset HEAD test.txt来撤回暂存区的修改,重新回到工作区,但是工作区的内容此时已经与版本库中的内容不同了,你还需要执行git checkout – test.txt来撤回工作区的修改,使工作区的内容与版本库分支内容一致,具体见下图,之前版本库中的test.txt文本是一行数字,之后添加一行新数字后add到暂存区,通过reset撤回暂存区的修改,通过checkout 撤回工作区的修改。
- 至此总结一下:对于一个已经版本控制的文件,①如果仅仅是工作区的修改,那么执行checkout – xx.txt,会撤回工作区的修改,使工作区内容与版本库最新版本一致②如果添加到暂存区,又修改工作目录中的文件,那么执行撤销命令,那么工作目录中的文件会退回到提交到暂存区的状态③如果工作目录修改后又添加到暂存区,那么先执行reset撤销暂存区修改,之后执行checkout撤销工作区修改,使工作区内容与版本库内容一致。(总觉得有点像绕口令的说。。。。)
- 关于删除文件,如果一个工作目录中的文件已经被版本控制,我手动删除,那么此时版本库与工作目录中文件不一致,此时分两种情况:如果你是不小心误删,那么通过git checkout – xx.txt可以从版本库获取最新版本返回到工作目录,另外一种是你确实想删除该文件,那么你就要删除版本库中的文件保持一致,通过执行git rm xxx.txt来删除,之后通过git commit来提交,执行完后工作目录和版本库处于一致状态,具体见下图
- 关于github的简单操作先写这些,记录下来,方便后期回看,这个github的东西,,当你熟练操作后,一个新的世界的大门就会向你开启,你会发现它能极大提高工作效率。。。。总之巴啦啦一堆的好处,后边还会写几篇github的东西,回见你呐