可以将git简单的分为三个区域
1、工作区(working directry)
2、暂缓区(stage index)
3、历史记录区(history)
如图:
git add files 把当前工作目录中的文件放入暂存区域
其实做了两件事:
1、将本地文件的时间戳、长度,当前文档对象的id等信息保存到一个树形目录中去(index,即平时说的暂存区)
2、将本地文件的内容做快照并保存到Git 的对象库
(综上:实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的 内容并不存储其中,而是保存在 Git 对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。)
如图:
在这个图中,我们可以看到部分 Git 命令是如何影响工作区和暂存区(stage, index)的:
图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。
图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个“游标”。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下
当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID 被记录在暂存区的文件索引中
当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树
git reset -- files 用来撤销最后一次git add files(因为每git add file一次,暂存区的文件都会被更改一次),你也可以用git reset 撤销所有暂存区域文件。
git checkout -- files 把文件从暂存区域复制到工作目录,用来丢弃本地修改。
当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变
当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动
当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改 动
当执行 "git status" 命令扫描工作区改动的时候,先依据 .git/index 文件中记录的(工作区跟踪文件的)时间戳、长度等信息判断工作区文件是否改变。如果工作区的文件时间戳改变,说明文件的内容 可能 被改变了,需要要打开文件,读取文件内容,和更改前的原始文件相比较(本地文件和与之对应的object库中的文件的内容进行对比),判断文件内容是否被更改。如果文件内容没有改变,则将该文件新的时间戳记录到 .git/index 文件中。因为判断文件是否更改,使用时间戳、文件长度等信息进行比较要比通过文件内容比较要快的多,所以 Git 这样的实现方式可以让工作区状态扫描更快速的执行,这也是 Git 高效的因素之一。
git diff files 来进行具体文件的变动对比,通常用来进行work directory 与 stage之间的对比,实质上是用 git objects 库中的快照与work directory 文件的内容的对比
参考文章:
http://www.worldhello.net/2010/11/30/2166.html
http://kb.cnblogs.com/page/148351/
- 大小: 16.8 KB
- 大小: 38.6 KB
分享到:
相关推荐
### Git GUI 详细文档:可视化界面Git全理解 #### Git GUI 概览 Git GUI 是一款专门为Git设计的图形化用户界面工具,旨在简化Git的工作流程,使版本控制变得更加直观和易于理解。对于初次接触Git的新手来说,通过...
02★Git入门★理解版本管理的流程_Git_Flow
在详细讨论Git之前,我们先来理解一下什么是版本控制系统。版本控制系统是用于跟踪文件或项目更改的工具,使用户可以随时回滚到之前的任何版本。这对于团队合作和项目维护至关重要,因为它记录了每个更改及其作者,...
Git是世界上最流行的分布式版本控制系统,它允许开发人员协作开发代码并跟踪每一次更改。"git压缩包下载git下载"这个标题和描述可能指的是提供Git的安装程序压缩包的下载服务。在本篇中,我们将深入探讨Git的核心...
为了充分利用Git for Windows 2017,你需要学习基本的Git命令,如`git clone`(克隆仓库)、`git add`(添加文件到暂存区)、`git commit`(提交更改)、`git push`(推送本地更改至远程仓库)等。此外,理解和掌握...
2. **版本控制基础**:Git的主要操作包括添加文件到暂存区(`git add`),提交更改到本地仓库(`git commit`),以及查看提交历史(`git log`)。掌握这些基础操作,可以实现对项目版本的追踪和管理。 3. **分支...
3. **工作区、暂存区与版本库**:理解Git的这三个基本概念至关重要。工作区是你编辑代码的地方,暂存区用于临时保存更改,而版本库则记录所有提交的历史。 4. **添加与提交**:在Git乌龟中,你可以通过图形界面选择...
1. **基本概念**:理解Git的基本术语,如仓库(Repository)、提交(Commit)、分支(Branch)、合并(Merge)和克隆(Clone),是使用Git的第一步。 2. **初始化和配置**:在安装Git后,用户需要配置用户名和电子...
在Git Bash中,你可以执行常见的Git操作,如`git clone`(克隆远程仓库)、`git add`(将更改添加到暂存区)、`git commit`(保存更改至本地仓库)以及`git push`(将本地更改推送到远程仓库)。这个免安装版的Git ...
1 安装GIT 代码如下:$ sudo aptitude install git$ sudo aptitude install git-doc git-svn git-email git-gui gitk git软件包包含了大部分Git命令,是必装的软件包,第二行命令也是Git软件包,但是是单独发布的,...
Git是世界上最流行的分布式版本控制系统,它允许开发者跟踪和管理代码变更,协同开发项目。在某些没有网络连接或者网络环境受限的场景下,离线安装Git变得尤为重要。本篇将详细介绍如何使用提供的Git离线rpm安装包在...
Git的基本操作包括初始化仓库(`git init`)、克隆仓库(`git clone`)、添加文件到暂存区(`git add`)、提交更改(`git commit`)、查看历史(`git log`)以及分支管理(`git branch`和`git merge`)等。...
- `git diff`:查看文件或工作区与暂存区的差异。 - `git log`:查看提交历史。 此外,Git还有许多高级特性,如Stash(暂存区)、Rebase(变基)、Submodule(子模块)等,对于协同开发和项目管理非常有用。 总之...
最新的Git与Github巨作课程,课程内容主旨分成了Git&Github极速入门与攻坚实战课程两部分,可以理解为一个是课程的详细教学篇,和一个精华缩减的集合。Git与Github教程详细介绍了Git的工作机制,Git命令行的基础学习...
Git是分布式版本控制系统,它在软件...总之,Git在Windows上的使用涉及安装、配置和操作,理解基本的Git命令和流程是高效开发的重要环节。无论是通过命令行还是图形界面,熟悉Git都能帮助开发者更好地管理和协作代码。
通过它,学生和研究人员可以更直观地理解`.git`目录结构以及如何从中提取信息。 在使用GitHack时,用户首先需要解压下载的GitHack-master压缩包,然后在命令行环境中进入工具的目录。执行相关的Python脚本(通常为`...
`git status`显示工作区的状态,帮助开发者了解哪些文件被修改或未追踪;`git commit`用来保存本地的更改,并附带一个提交信息;`git branch`和`git merge`则用于处理分支管理和合并。 此外,为了更好地协作,...
在本教程中,我们将深入探讨Gitblit的安装配置以及日常使用,帮助你更好地理解和掌握这一强大的Git服务器。 1. **Gitblit简介** Gitblit以其简洁的界面和易用性赢得了用户的喜爱。它不仅支持本地运行,还可以作为...
比如,`git clone`用于复制远程仓库到本地,`git add`用于将更改添加到暂存区,`git commit`用于保存更改到本地仓库,`git push`则用于将本地更改推送到远程仓库。此外,`git pull`用于获取并合并远程仓库的更新,而...
2. 图形化历史查看:通过图形界面查看代码的提交历史,便于理解代码的演变过程。 3. 分支管理:创建、切换和合并分支操作变得简单直观。 4. 解决冲突:TortoiseGit提供冲突解决工具,帮助用户处理合并时的冲突问题。...