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^ 
原文地址:https://www.cnblogs.com/wangdongfang/p/13737397.html