GIT基本概念

来源:互联网 发布:java雷霆战机2源代码 编辑:程序博客网 时间:2024/06/07 09:36

   

   1、工作区(working directory)、版本库(repository)、暂存区(Index/stage) 

这三个是Git中最重要的三个概念

1.1 工作区(Working Directory)

工作区是个工作目录,实质上就是我们的在开发过程中对其进行添加、编辑的源代码。包括头文件、源文件和配置文件

1.2 版本库(Repository)

在工作区中有一个隐藏文件 .git ,它不属于工作区,而是Git版本库。该文件下包括很多其他文件,其中重要的是暂存区(.git/index)、对象库(.git/objects)、分支(master分支和其他分支)、指向master的指针HEAD。

1.3 暂存区(Index/Stage)


在版本库.git目录下,有一个index文件,这个文件就是暂存区。它实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的内容并不存储其中,而是保存在Git对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。如果当前仓库,有文件更新,并且使用git add 命令,那么这些更新就会出现在暂存区中。


  • 图中的master分支是Git为我们自动创建的第一个目录树。

  • 图中的HEAD 实际是指向 master 分支的一个"游标"。

  • 图中的objects标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

  •     2、Git几个基本命令及其对应的内部活动


    2.1 git add filename

                                               当对工作区修改或新增的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改或新增的文件内容被写入到对象库中的一个新的对象中,而该对象的ID 被记录在暂存区的文件索引中。

    2.2 git commit -m "commit description"

    当执行提交操作(git commit)时,暂存区的目录树写到版本库中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

    2.3 git checkout 系列

    1.git checkout -- filename(撤销工作区)


    该命令用于把名为”filename“的文件在工作区的修改全部撤销。


    这里有两种情况:


    一种是文件自修改后还没有被放到暂存区,撤销修改后,文件就回到和版本库一模一样的状态;


    另一种是文件已经添加到暂存区后,又作了修改,撤销修改后,文件就回到添加到暂存区后的状态。暂存区中依然保留修改的内容


     总之, 这个命令是以最新的存储时间节点(add和commit)为参照(因为Git只能track added和committed的文件),覆盖工作区对应的文件;

      2.git checkout HEAD .和git checkout HEAD filename(撤销工作区和暂存区)
      
     该命令用于撤销工作区中未添加(add)的修改和暂存区中未提交(commit)的修改。

    2.5 git reset 系列

    1.git reset HEAD filename(撤销暂存区的修改)

    该命令用于把暂存区的修改撤销掉(unstage),工作区不受影响。
       

    2.git reset -- hard commit-id(版本回退)
    该命令用于版本回退,可以将工作区内容回退到“commit-id”代表的版本并清空暂存区。
        
    回退前,用git log可以查看提交历史,以便确定要回退到哪个版本。

    要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

    特别的,HEAD代表当前版本,HEAD^代表上一版本,HEAD^(n)代表上n个版本。

    2.6撤销小结


            1、git checkout -- filename ------ 撤销工作区
    2、git reset HEAD filename ------ 撤销暂存区但不撤销工作区
    3、git checkout HEAD filename ------ 撤销工作区和暂存区(可以理解为1+2)
    4、git reset -- hard commit-id ------ 将工作区回退到commit-id代表的版本





    0 0