zoukankan      html  css  js  c++  java
  • git学习一

    前几天写完那个scrapy实例,在上传到我们实验室的github仓库上时出现了一些问题,在请教同学后,得以解决,也加深了对git的理解,关于git的介绍,这里就不多说了,网上很多,廖大神的git教程(https://www.liaoxuefeng.com/wiki/896043488029600)也是非常的好.没下载git的同志们,请自行百度(自己太菜,哭笑。。。),以下命令,都是在已经安装好 git的基础上进行的。

    0x01:创建git仓库

    首先找到一个目录(路径中不要含有中文),然后在此处打开git bash here,出现如下界面。你可以把它想象成windows的命令窗,所有的git命令都可以直接在这里输入运行。

    然后我们使用mkdir命令创建一个learngit目录,并进入到这个新建的目录,pwd命令是显示当前目录的绝对路径。操作如下:

    0x02:生成git仓库

    通过git init命令生成仓库,操作如下:

    这样,我们就我刚才创建的一个普通的目录,变成了一个git仓库,里面会多一个.git的目录(隐藏文件,可以用ls --ah命令查看),这个目录就是git用来跟踪管理版本库的。

    0x03:把文件添加到版本库

    之所以要把文件添加到版本库,就是为了能够对文件进行版本管理,这一步是关键,要不git也无法发挥它的作用了。

    在learngit下创建一个名为readme.txt的文本文件,在里面写入一下内容:

    Git is a version control system.
    Git is free software.
    

     然后通过下面两条命令将文件上传到版本库:

    git add readme.txt    //无返回信息
    
    git commit -m "wrote a readme file"    //-m参数后面加有效注释   返回信息:1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。
    

    再解释这两个命令之前,我们先了解一下git的工作区、暂存区、master分支。

    工作区就是在电脑上能看到的目录,比如我们创建的这个learngit文件夹,

    Git的版本库里存了很多东西,其中最重要的就是称为stage的暂存区,还有Git为我们自动创建的第一个分支master(它是老大),你可以把它们三的工作关系想象成“你(工作区)的作业(修改的文件)->学委(暂存区)->(老师)”,修改完文件,就是你写完了作业,git add,把你的作业交给学委,git commit,,学委把你的作业交给老师,老师记录你每一次作业的改动。

    git add 把工作区的文件提交到stage暂存区;

    git commit 把stage暂存区的文件提交到master分支。

    0x04:查看状态和修改信息

    现在我们修改一下readme.txt文件,内容如下:

    Git is a distributed version control system.
    Git is free software.
    

     然后使用git status命令查看当前状态:

    上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

    知道文件被修改了,好奇心驱使我们想知道那个地方被修改了,git diff命令可以帮到我们:

    git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed单词。

    然后我们就可以使用git add readme.txt git commit -m "XXXXX"来提交修改后的readme.txt文件了。

    0x05:查看日志

    现在,我们对readme文件再做一次修改,内容如下:

    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    

     然后同样通过两个命令提交。现在,我们一共对readme文件做了三次改动,第一次创建,第二次在第一行增加distributed,第三次在第二行增加distributed under the GPL。git帮我们记录了每一次的文件改动,我们可以用git log命令查看:

    最上面是最近一次的修改,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

    每一行,记录了一次文件改动,每一行的签名的一串字符,是该版本对应的版本号,在版本回退的时候回用得到。

    0x06:版本回退

    来想这样一个问题,我们想让readme这个文件夹回退到第二个版本该怎么办呢?一个粗暴的办法是直接把readme里面的内容改回到第二个版本的内容,然后再同个add和commit命令提交到master。其实完全不用,git提供了强大的版本回退功,首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100,实际操作如下:

    查看日志,可以看到已经回退到第二个版本了。

    另外,我们在回退回来之后,还可以再回退回去,就是说你从二十世纪回到十九世纪,还能从十九世纪回来。还记得上面我们说的那个版本号嘛? --hard参数不仅可以跟HEAD^,还可以跟某个版本号,这样我们就可以回到readme的第三个版本了。

    查看readme文件,就会发现已经回退到第三个版本了。(注:每个人的版本号都是不一样的,一定要加自己的版本号)

    现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

    在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

    找到了版本号,就可以回退到我们需要的那个版本了。

     (ps:本人太菜,若有错误的地方欢迎大佬随时责骂。。。。xixixii)

  • 相关阅读:
    5 输出的properties文件按照key进行排序
    JFinal 部署在 Tomcat 下推荐方法(转)
    15个必须知道的chrome开发者技巧(转)
    一次完整的浏览器请求流程(转)
    工作第一天
    Struts2的crud
    equal 和 ==
    生成Apk遇到的问题
    Http Framework
    Gradle: The New Android Build System
  • 原文地址:https://www.cnblogs.com/liangshian/p/10984212.html
Copyright © 2011-2022 走看看