Git中工作区、暂存区和版本库三者关系

 区分三者关系

       Git最让你迷惑的无非是它里面的各种概念了,如果是刚开始接触Git希望看完本篇介绍之后有一个清晰的认识,笔者认识也有限这里只说说个人对使用Git的感受,说一下它里面的几个最常用的概念的理解。

       在初始化git版本库之后会生成一个隐藏的文件 .git ,可以将该文件理解为git的版本库 repository,而我们自己建立的项目文件夹即工作区 working directory ,在.git 文件夹里面还有很多文件,其中有一个index 文件 就是暂存区也可以叫做 stage ,git还为我们自动生成了一个分支master以及指向该分支的指针head ,如下图   

       

       从图中可以看出来respository包括分支master和stage, working diretory 可以理解为我们打开开发环境如eclipse,里面的内容即工作区的内容,在工作区里面有的代码以及配置文件等我们需要提交到版本库里面,最终是到了分支master上面,暂存区只是一个临时保存修改文件的地方。

       实例讲解

       平时我们使用的命令git add file1 是把文件从工作区提交到暂存区,git commit -m “prompty” file1 是把文件从暂存区提交到了分支master下面,这里因为只有一个分支master,就提交到master上了,下面让我们再来结合具体例子来说明一下。

       我们修改一下tgb.txt文件增加一行 “l love you” ,并新建一个文件 test1.txt,现在还没有执行git add命令,这种修改都还停留在工作区内,用git status查看状态,如图

      

       上图表明修改并没有在暂存区里面,当我们执行git add test1.txt ,git add tgb.txt后,再来看一下状态

        

      这两个文件被添加到了暂存区,但是还没有提交,当执行git commit -m “tijiao” 后文件即从暂存区到了master分支上面,如图将看不到暂存区里面有什么内容。

     

      Git管理的是添加到暂存区里面的修改,包括增删改等等都算是可以跟踪的文件变动,也可以说git只管理我们变动的部分变动的我们才往暂存区提交,这也是git比其他版本系统设计优秀的一点,以后,会详细说一下各个版本系统管理文件是如何管理的,他们的设计思想是什么。

       通过三个命令理解

      下面还有一个需要注意的git diff 命令的差异:

  git diff 比较的是工作区和暂存区的差别
  git diff –cached 比较的是暂存区和版本库的差别
  git diff HEAD 可以查看工作区和版本库的差别

      通过一个添加文件既可以明显看出他们之间区别,不过这里有一个前提是已经提交到暂存区的文件修改的时候才可以看出明显区别,这也是以为啥git只能跟着提交到暂存区的文件,如果只是在工作区新建一个文件,那么输入这三个命令都没有结果为空白。

      我们继续修改tgb.txt,在文件末尾添加  we are good boy.

      分别输入三个命令,效果为:

      

      从图中可以看出,工作区与暂存区、工作区与版本库都有变化,而版本库与暂存区并没有变化。进一步执行git add tgb.txt 

        

      执行git add tgb.txt之后发现git diff没有输出内容,表明工作区与暂存区已经同步,暂存区与版本库、版本库与工作区没有同步。最后一步执行git commit 

         

       当执行完git commit后,三个命令都没有输出结果,表明我们修改的文件已经被同步的版本库,已经被版本库管理起来了。


Git基本常用命令如下:

  mkdir: XX (创建一个空目录 XX指目录名)

  pwd: 显示当前目录的路径。

  git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。

  git add XX 把xx文件添加到暂存区去。

  git commit –m “XX” 提交文件 –m 后面的是注释。

  git status 查看仓库状态

  git diff XX 查看XX文件修改了那些内容

  git log 查看历史记录

  git reset –hard HEAD^ 或者 git reset –hard HEAD~ 回退到上一个版本

  (如果想回退到100个版本,使用git reset –hard HEAD~100 )

  cat XX 查看XX文件内容

  git reflog 查看历史记录的版本号id

  git checkout – XX 把XX文件在工作区的修改全部撤销。

  git rm XX 删除XX文件

  git remote add origin https://github.com/tugenhua0707/testgit 关联一个远程库

  git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库

  git clone https://github.com/tugenhua0707/testgit 从远程库中克隆

  git checkout –b dev 创建dev分支 并切换到dev分支上

  git branch 查看当前所有的分支

  git checkout master 切换回master分支

  git merge dev 在当前的分支上合并dev分支

  git branch –d dev 删除dev分支

  git branch name 创建分支

  git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作

  git stash list 查看所有被隐藏的文件列表

  git stash apply 恢复被隐藏的文件,但是内容不删除

  git stash drop 删除文件

  git stash pop 恢复文件的同时 也删除文件

  git remote 查看远程库的信息

  git remote –v 查看远程库的详细信息

  git push origin master Git会把master分支推送到远程库对应的远程分支上

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值