Git三层同步问题

来源:互联网 发布:勤思考研网络课程 编辑:程序博客网 时间:2024/06/05 16:34

最近在看廖雪峰老师的Git教程,根据廖老师的教程,结合自己的理解和试验,总结一下Git三层的同步问题。

 

我们可以将Git分成三层,分别是工作区(workstation),暂存区(stage),版本库(master)。工作区就是本地的工作目录,暂存区是中间一层暂存修改的抽象层次,版本库就是最终的版本控制层次。

 

工作区  à  暂存区  à  版本库

 

首先,工作区的新建文件、修改文件以及删除文件都可以在本地电脑上直接进行。

 

工作区与暂存区之间的同步:

暂存区同步成工作区版本分两种情况,

1、工作区新建或者修改了文件

gitadd filename

2、工作区删除了文件

gitrm filename

经过上面,就使得暂存区中的版本同步成了与工作区相同的版本。

若想让工作区同步成暂存区的版本呢?或者可以称之为回退。

gitcheckout -- filename

这使得工作区同步成了暂存区的版本。

 

暂存区与版本库之间的同步:

若想将版本库同步成与暂存区相同的版本,只需要git commit –m “string”即可。

若想将暂存区同步成与版本库相同的版本,或称之为回退,git reset HEAD filename。

 

版本库这一层次上也可以进行版本回退。比如我们想将版本库中当前版本回退到上一个版本,可以git reset --hard HEAD^。

 

理清楚上面这些关系,就可以结合实现工作区、暂存区、版本库各自层次以及层次之间的同步回退等操作。

 

下面用一个例子来说明一下。

(1)

首先在工作区新建一个文件world.txt,为版本A。

然后add到暂存区后马上commit到版本库。

此时,工作区、暂存区以及版本库里都是版本A。

(2)

工作区中修改world.txt文件,为版本B。

然后add到暂存区后马上commit到版本库。

此时,工作区、暂存区、版本库里都是版本B。

(3)

工作区中修改world.txt,为版本C。

然后只add到暂存区而不commit到版本库。

此时,工作区与暂存区里都是版本C,而版本库里是版本B。

(4)

工作区里修改world.txt,为版本D。

此时工作区里版本D,暂存区里版本C,版本库里版本B。

 

上面的这四步操作和四个版本作为前提,下面就进行三个层次四个版本的同步。

 

如果以版本库为对象,此时版本库中是B版本,

若想让其成为A版本,可以进行版本回退,回退到上一个版本即版本A。

如果想让其同步成版本C,只需要commit一下。

如果想让其同步成版本D,则先add一下,然后commit一下。

 

如果以暂存区为对象,此时暂存区为C版本,

若想让其成为D版本,只需要add一下即可。

若想让其成为B版本,需要回退,reset一下。

若想让其成为A版本,需要先将版本库回退到版本A,然后暂存区reset成版本库当前版本。

 

如果以工作区为对象,此时工作区为D版本,

若想让其成为C版本,checkout一下即可。

若想让其成为B版本,先将暂存区reset成B版本,在checkout一下。

若想让其成为A版本,先将版本库回退到版本A,再将暂存区reset成版本库当前版本即版本A,然后checkout一下。

0 0
原创粉丝点击