Git本地3个工作区域详解及如何回滚,还搞不懂git建议看看

Java基础 潘老师 1个月前 (10-18) 60 ℃ (0) 扫码查看

众所周知,现在Git属于比较流行的版本控制工具,但是想要灵活用好git却并不是那么容易,我们需要对git的工作区域要有足够的了解才行。

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
git的4个区域关系

Workspace:工作区,就是你平时存放项目代码的地方;

Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);

Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本;

Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换;

本地的三个区域确切的说应该是git仓库中HEAD指向的版本:

Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。

WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。

.git:存放Git管理信息的目录,初始化仓库的时候自动创建。

Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。

Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。

git提交出错了怎么办?

我们在使用Git的过程中难免会遇到提交错误情况,今天我们来尝试一种更加优雅的方式,让代码回到提交以前的样子。

在正式讲述优雅的方式之前,我们先来看下一个文件的旅程,从本地到远程仓库需要经历哪些区域呢?

Git主要可以划分以下几个文件区域:工作区、暂存区、本地仓库、远程仓库

一开始我们在工作区创建修改文件,新来的小文件一般需要经历 git add,然后进入暂存区,这算是上了Git版本控制的贼船了,暂存区的文件想要进入本地仓库就需要 git commit,此时还需要提交一份文件说明。最后通过 git push把文件推送到远程仓库。

我们来一步一步的玩,首先是添加到暂存区还没有提交到本地仓库的文件该怎么撤回呢?这时候我们可以直接使用 git reset命令,此命令可以直接把所有添加到暂存区未提交的文件撤回到工作区。

接着是已经提交到本地仓库的文件,我们可以通过 git log查看提交日志的。这里我们常用的撤回可以分为下面两种,一是把文件撤回到暂存区,二是把文件撤回到工作区。


1、文件撤回到暂存区 git reset --soft XXX(版本号)

比如我们把版本从c2撤回到c1版本,则可以使用此命令 git reset –soft c1,此时从c1版本到c2版本之间提交的所有文件都会被打到暂存区,但是并不会修改你本地的文件内容,你可以继续提交。

2、文件撤回到工作区 git reset --mixed XXX(版本号)

比如我们把版本从c2撤回到c1版本,则可以使用此命令 git reset –mixed c1,此时从c1版本到c2版本之间通过添加提交到本地仓库的文件都会回到工作区,已经在本地仓库,版本迭代期间修改内容的文件回到暂存区,但是并不会修改你本地的文件内容,你可以继续操作。
3、撤销所有提交 git reset --hard XXX(版本号)

这个命令可以说是硬核操作,不仅会撤销提交的操作,还会更改你本地文件,同样那c1和c2版本举例子,

  • 此操作会把c1到c2版本之间所有添加暂存区并提交到本地仓库的文件删除掉,
  • 版本更新期间修改内容的文件会把内容还原到c1版本,文件回到工作区。
  • 所有添加到暂存区未提交到本地仓库的文件会被删除
  • 未添加到暂存区的文件不受影响,因为他们还没有搭上Git版本控制的贼船
  • 此操作执行之后,回收站都找不到。

关于 git reset的命令还有 git reset --mergegit reset --keep等等。

那么提交到远程仓库的文件该怎么办呢? git reset只对本地的文件有作用,对远程仓库上就是无效的了。这时候就需要新的命令 git revert,这个可以理解成回退到某个版本,并且生成一个新的版本,此时并不会修改之前的提交信息。 git revert是版本的回退,但却是一次新的提交信息,将本地代码回退到指定版本,这时候你可以 git push把线上的代码更新一下。

有时候使用 git reset --hard也可以达到更改远程仓库的目的,但是在多人操作的时候,你想要撤回某次提交,要留点痕迹,不然可能会出大问题。总之,提交容易,撤销的时候要多加注意了。

以上就是Git本地的3个工作区域详解,以及当我们遇到提交代码错误的时候该如何进行代码回滚,建议还搞不懂git的同学可以看看,自己有空再去实操下。


版权声明:本站所有文章,如无特殊说明,均为本站原创。转载请务必注明文章来源,谢谢支持。
本文链接:https://www.panziye.com/java/javabase/5673.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】