zoukankan      html  css  js  c++  java
  • git 工作区与版本库

    git 工作区、版本库

    在我们使用git的时候,我们脑海中一定要有一个关于git的框架,如下图:

    我们先对git的工作区、暂存区、本地仓库做一个基本的解释

    工作区:

    就是我们电脑中代码的下载目录

    版本库:

    在我们的下载目录下有个.git目录,这个目录就是所谓的版本库,暂存区就是.git文件夹下的一个index(或者staged)文件。

    我们可以这样理解,当我们下载了一份代码,里面包含了各个文件夹以及各种文件,这些文件都是被git追踪了的,每个文件的追踪信息保存在.git/object(对象库)文件中。

    我们使用git修改文件的常规步骤是:

    步骤1:修改工作区文件

    步骤2:执行git add。

    该操作会将步骤1中修改的文件的信息保存下来,形成一个索引(就像是一种映射),保存在版本库中的index(或者stage)文件中。

    步骤3:执行git commit

    该步骤会将步骤2中保存在index中的修改的文件的信息反映到objects(版本库)中(将index中的映射信息,再次映射到objects(对象库)中)。此时我们的objects(对象库)就保存了我们在工作区中的修改。

    步骤4:执行git push

    将本地仓库,objects(对象库)中的修改信息推送到远端仓库,并与远端仓库进行比对,进而提出MR。

    HEAD是什么

    HEAD其实就是一个指向objects(版本库)当前分支的一个游标,所有命令中使用HEAD的地方都可以使用当前分支名替换。

    更新代码怎么做

    我们更新代码一般有如下两条命令:

    命令1:git pull origin/master

    拉取远端master分支代码更新本地工作区,注意该命令会直接更新你的工作区,所以此时你的objects(对象库)并不会被更新(这一点一定要注意,因为很多时候我们执行了git pull然后再执行git checkout HEAD xxxx时,工作区的xxxx并没有体现为最新,就是由于对象库没有更新导致的)。

    命令2:git fetch

    该命令会更新对象库,此时对象库中的文件是最新的,但是工作区不是最新的。

    综上我们可以看出,如果想让我们工作区的代码是最新的(这也是我们最为关注的),需要执行git pull命令。执行了git fetch之后,只会更新对象库,想要更新工作区还是要执行一下git pull命令。

    几个命令:
    #移除不必要的添加到暂存区的文件
    git reset HEAD 文件名
    
    #去掉上一次的提交(会直接变成add之前状态)   
    git reset HEAD^ 
    该命令与git reset --hard HEAD^相同。
    
    #去掉上一次的提交(变成add之后,commit之前状态) 
    git reset --soft HEAD^ 
    
  • 相关阅读:
    SparkSQL & Spark on Hive & Hive on Spark
    Elasticsearch和Scala类型转换
    Java和Scala容器转换
    Spark应用远程调试
    scala下划线的用法
    Maven打包方式
    安装ElasticSearch遇到的深坑
    SparkSQL JDBC和JDBCServer区别
    source命令用法:source FileName
    System.getProperty()
  • 原文地址:https://www.cnblogs.com/wangdongfang/p/13737397.html
Copyright © 2011-2022 走看看