zoukankan      html  css  js  c++  java
  • 【Git】2. Git常用命令详解、版本切换原理

    一、新增文件

    1、设置用户签名

    签名的作用就是为了区分不同的人,方便查看版本的时候知道操作的人是谁。首次安装好git之后必须设置一下签名,否则无法提交代码。
    另外,这里设置的签名跟你登录到远程仓的账号没有关系。

    git config --global user.name 用户名
    git config --global user.email 邮箱
    

    2、初始化本地库

    想通过git管理文件目录,首先要让git获取到管理权,所以要初始化。

    git init
    


    初始化成功,提示初始化了一个空的git仓库.git,这里的文件就别改动了,可以打开看看。

    3、查看本地库状态

    初始化本地库之后,就可以查看本地库的状态了。

    git status
    


    看下返回的3行分别说了啥:

    1. 本地库在master分支,master是默认生成的。
    2. 目前还没有提交过任何东西。
    3. 除了没有提交过,而且现在还没有什么东西需要你提交。

    这时候新增一个文件的hello.txt,再用git status看这里就不一样了。

    出现一个新行:Untracked files,未被追踪的文件,红色标记。说明这个文件只在工作区,但是没有被git追踪。
    最后一行的描述也变了,说目前还没有提交文件,但是存在未被追踪的文件。

    4、添加暂存区

    git的提示做的还是很友好的,基本上都会给你操作提示。接着上面来,现在如何让文件被追踪,提示说了,用git add

    git add
    


    出现一个warning,说的是换行符自动替换处理,因为那个文件我直接在git-bash窗口用linux命令新建的,所以自动转化了win用的CRLF,不用管它。

    现在重新查看下git status

    绿了,绿了,只不过不是古天乐(这是一个传奇页游广告的梗),而是刚才的hello.txt文件。

    5、删除暂存区

    现在这个文件也只是在暂存区里,暂存区里的文件是可以删掉的。如果现在我不想让这个文件产生一个历史版本,那么要在提交到本地仓库之前删掉它,就在暂存区删吧。
    同样git也给了提示。

    git rm --cached <file>
    


    成功删除,但是记住这里删的是暂存区的,你本地工作区的文件没动,用ll查看一下。

    6、提交本地库

    把文件重新提交到暂存区,接下来就可以提交到本地库,形成一个历史版本了。

    git commit -m "日志信息" 文件名
    


    提交成功,看提示信息:

    • [master (root-commit) a70616d],这里的a70616d就是版本号了,这个是简短版的。
    • 1 file changed, 19 insertions(+),1个文件被改变,插入了19行信息(文本里有19行内容)。

    7、查看版本信息

    刚才提交本地库产生一个版本信息,可以用这个命令查看。

    git reflog
    


    显示了刚才提交的版本信息。

    • a70616d是版本号。
    • (HEAD -> master代表指针指向这个第一个版本。
      还可以用这个命令查看更相信的版本信息:
    git log
    


    可以看到这里的版本号很长a70616d3fc1c69f948a7b0d4ed2b640bedb1e747,这个就是完整版的版本号了。

    二、文件被修改后

    上面是新增一个文件,但是最多的场景还是同一个文件被反复修改,现在我去修改hello.txt文件,增加写内容,然后git status


    提示有一个文件被修改了,红色表示还没有被追踪,那么重复上面的动作,提交到暂存区即可,用git add。提交成功了再次查看。

    最后再提交本地库。

    这里看到最后的提示,有一行新增,一行删除,可是我只是在第一行后面继续增加了内容。

    因为git里面是按照行来维护文件的,我修改了第一行内容,实际上对于git来说,要先删除掉之前的第一行内容,然后再增加修改后的第一行内容。

    现在查看版本信息git reflog


    可以看到:

    • 有2个版本信息。
    • 此时的指针是指向第二个版本。

    三、版本穿梭

    比如现在我想回退到之前某一个历史版本。

    先查看历史版本,git reflog,目前我有3个版本。

    我现在要回到第二次提交的版本,复制出版本号,使用如下命令:

    git reset --hard 94ca3de
    

    此时我再查看版本,发现指针已经移到了第二次提交的版本上了。

    至于,第一行是告诉你做了一个reset的操作,目标版本号是什么。

    git切换版本的原理
    底层其实是移动HEAD指针。

    可以先打开本地的.git下的HEAD,可以看到里面指针指向master,说明当前是在master分支上。

    接着,可以打开.git/refs/heads/下面的master,可以看到里面的内容就是当前所在版本的版本号。

    当继续切换版本到a70616d的时候,master文件里的版本号也会变更为对应的。

    用示意图来描述的话,其实在我们刚提交完第三个版本的时候,应该是这样的:

    当我们切换版本的时候,其实就是指针变了,比如现在切换到第二版本:

    接下来,到了分支相关了。

    --不要用肉体的勤奋,去掩盖思考的懒惰--
  • 相关阅读:
    算法竞赛进阶指南--lowbit运算,找到二进制下所有是1的位
    linux
    conda配置安装pytorch
    anaconda的安装及使用
    python操作mysql
    python生成文字云
    决策树基本原理
    Ubuntu截图软件
    ubuntu安装teamviewer
    k-最近邻算法基本原理
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/14737683.html
Copyright © 2011-2022 走看看