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^

git 工作区与版本库的更多相关文章

  1. git config配置,工作区和版本库联系。

    关于git和github的介绍,我这边不多说. 使用在windows下使用git,需要配置环境变量,也可以使用git自带的终端工具.,打开git bash laoni@DESKTOP-TPPLHIB ...

  2. Git入门——本地版本库操作

    作为一个一直用SVN的家伙,深深地感到了自己在版本控制工具上的落伍.... 首先必须强调的是: Git与Github不是一回事. Git是目前世界上最先进的分布式版本控制系统,于2005年被linux ...

  3. git入门 创建版本库, 版本管理 分支 标签

    参考: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 GIT最流行的分布式版本 ...

  4. 学习笔记--Git安装 创建版本库 图文详解

    一.Git下载 在Windows上安装git,一般为msysgit,官网地址:http://git-scm.com/ 我下载的是Git-1.9.2-preview20140411.exe 二.Git安 ...

  5. Git教程--Git安装和版本库的创建

    Git的诞生 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大是靠全世界热 ...

  6. Git学习之路(2)-安装GIt和创建版本库

    ▓▓▓▓▓▓ 大致介绍 前面一片博客介绍了Git到底是什么东西,如果有不明白的可以移步 Git学习之路(1)-Git简介 ,这篇博客主要讲解在Windows上安装Git和创建一个版本库 ▓▓▓▓▓▓ ...

  7. [git]入门-创建版本库

    转载整理自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256 ...

  8. Git学习--创建版本库

    什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...

  9. 『现学现忘』Git基础 — 8、Git创建本地版本库

    目录 1.Git版本库介绍 2.创建本地版本库 场景一:创建一个空的本地版本库. 场景二:项目中已存在文件时,创建该项目的本地版本库. 场景三:在GitHub网站上创建仓库,克隆到本地. 1.Git版 ...

随机推荐

  1. 使用cmd制作图片木马

    我们可以使用windows下自带的cmd制作图片木马,配合文件包含漏洞可以达到getshell的目的 我们找到一张图片:kiss.jpg 如图: 写好一句话木马:chopper.php 将两者放在同一 ...

  2. 在Centos7下docker配置自动化环境镜像(python3.7+selenium 3.11+firefox 62+geckodriver 0.21)

    最近在学习Docker,准备做自动化测试代码集成的功能.如下文章的前提是已经安装好linux系统,且成功安装好Docker. 接下来我会按步骤一步一步的对自动化需要的一些环境进行安装,如果没有特别说明 ...

  3. Day7 【Scrum 冲刺博客】

    每日会议总结 昨天已完成的工作 方晓莹(PIPIYIng) 对接车位管理接口 处理对接接口遇到的bug和错误 方子茵(Laa-L) 暂无 黄芯悦(Sheaxx) 完成住户车位查询页面 完成住户物业报修 ...

  4. es6 数组新增方法

    1.Array.from(): 这个函数的作用是将类似数组的对象转化为数组,比如DOM对象 let arrayLike = {      "0":"TangSir&quo ...

  5. Codeforces Round #682 Div2 简要题解

    Contest link A.Specific Tastes of Andre Problem link 题意 构造一个长度为 \(n\) 的序列,使得每个非空子序列的和都被其长度整除. 思路 直接每 ...

  6. 【题解】「P6832」[Cnoi2020]子弦

    [题解]「P6832」[Cnoi2020]子弦第一次写月赛题解( 首先第一眼看到这题,怎么感觉要用 \(\texttt{SAM}\) 什么高科技的?结果一仔细读题,简单模拟即可. 我们不难想出,出现最 ...

  7. NOI2008 志愿者招聘

    文化课 + 竞赛双废物又来水题解了. 首先,对于题干中的人,很像网络流中的流量,但是他有一个每天人数的下限,我从网上借鉴(chaoxi)到了两种思路: 把下界限制转化为一条边的流量下界,这样就是最小费 ...

  8. Java8新增的这些集合骚操作,你掌握了嘛?

    目录 Iterable的forEach Iterator的forEachRemaining Collection的removeIf Stream操作 List的replaceAll List的sort ...

  9. rman删除归档日志无法释放

    背景 当Oracle 归档日志满了后,将无法正常登入oracle,需要删除一部分归档日志才能正常登入ORACLE.最近遇到一个问题,一套Oracle 11g数据库使用RMAN删除了归档日志,但是仍然无 ...

  10. Mac电脑完美解决 BasicIPv6ValidationError 问题,通过命令行更改ip设置

    在更改mac电脑ip网络时,提示BasicIPv6ValidationError.