对git中文件各个状态的理解

我之前开发java项目的时候也有用过版本管理工具svn,不过老是弄不清楚各个状态之间的关系和操作的含义,最近使用github管理自己的代码和一些笔记,对于一些操作还是不太理解(太笨了。。。),网上也查过一些零零碎碎的相关内容,不过还是模糊不清。于是我打算较为系统地学习一下git和github。http://git-scm.com/book/zh/v1这个网站系统地介绍了git原理还有操作等等,有兴趣的朋友可以参考学习。

要使用git工具进行版本管理,首先要明白git各种状态的含义。如下图所示,

git库中文件的整个生命周期中的状态包括:

  • untracked(未被跟踪)
  • unmodified(未修改)
  • modified(已修改)
  • staged(在暂存区中)

其中unmodifiedmodifiedstaged表示文件已被跟踪,即已经加入版本管理中。

当从github远程库中clone项目到本地后,该项目中所有文件状态为unmodified;在该项目中新建一个文件后,该文件的状态为untracked,通过git add文件状态变为unmodified(此时该文件的状态同时为staged,已经存在暂存区中了,其实git add的潜台词就是把目标文件加入暂存区域),通过编辑,文件状态变为modified,被修改的文件未被放到暂存区域中,此时通过git
status
命令查看的话,会发现暂存区中和未暂存区同时存在该文件!!!为什么会这样呢???因为此时暂存区中的该文件是上次通过git add命令添加时候所处的状态,而未暂存区中该文件的状态是这次通过编辑后所处的状态,git记录了两种状态,如果这个时候用git commit命令提交该文件,只会把该文件的前一种状态保存到git仓库,修改后的状态不会保存到git仓库,要通过git
add
操作才能将修改后的文件状态加入到暂存区域中,然后可以通过git commit命令将修改后的文件提交到git仓库,有点啰嗦了==,能够理解就好^_^。

讲到这里,有必要提一下以下三个概念:

  • git
  • github
  • 工作目录
  • git仓库
  • 远程库

git仅仅是在本地对代码进行版本管理,而github在网上提供了远程库,用来存放代码。如果我们只在本地使用git工具的话,只需用到工作目录git仓库,如果使用github的话,那么工作目录git仓库远程库三个都要用到。

工作目录即我们对文件进行新建、删除等操作所在的目录(把暂存区归到工作目录,便于理解),在暂存区中的文件通过git commit操作后,可以将该文件和添加的批注添加到git仓库中,而通过git push操作,我们可以将git仓库中的文件同步到远程库

这篇文章主要介绍了通过git管理的文件的生命周期中的各种状态以及我对各种状态和各个概念的理解,如有不正确之处,恳请各位大虾批评指正,关于具体的git和github具体操作将在下次讲解。

时间: 2024-10-23 01:54:38

对git中文件各个状态的理解的相关文章

Git中三种文件状态及其转换

Git作为一种版本控制解决方案,由于其具有的分布式特性,正被越来越多的用户熟知,一些有名的开源项目,如:Linux kernel,CakePHP,Ruby on Rails等,都在使用Git进行版本管理. 在Git中,文件状态是一个非常重要的概念,不同的状态对应不同的操作.因此,要想熟练掌握Git的用法,需要了解Git的几种文件状态. 为了说明的方便,现在初始化一个项目,也就是将项目所在目录纳入Git的管理之下.假设项目目录为hello_world,初始化之后,在目录下新建README.txt文

Git中的文件状态和使用

(暂存区 即Index In Git) commit 到 local respository的内容,不想push,则使用git reset 将文件状态回转到staged|modified|unstaged: git reset HEAD^   git reset --soft HEAD^git reset HEAD~3    (本地有3次commit未提交时用,也可以git reset HEAD^操作3次) 状态回转用git reset 被delete的内容没有push到远端仓,此时想恢复文件:

Git 中对象模型和文件的详细视图

Git 中存在的三种状态:工作目录.索引和对象库. 目录中存在两个文件,且经过一次提交,所以现在是同步的. 对 file1编辑,更改为quue.状态如下: 接下来执行git add file1将其添加进索引库中. 提交: 虚拟树对象转换成一个真实的树对象后,以SHA1命名,然后放在对象库中. 创建新的提交对象 master分支的引用移动至新创建的对象,成为新的master HEAD

线程的生命周期 - 理解Java中线程的状态

刚刚开始学cocos2-x,仅仅是按照教程把已经安了一般Android的开发环境的eclipse重新升级到安装好cdt和ndk就花了我几十小时,差点都要放弃了. 参考博客 D:\cocos2d-x\cocos2d-x-2.2.3\cocos2dx\platform\third_party\android\prebuilt 说说大概的过程: 下载ndk插件,ndk包,cdt插件.最开始我按照书上的下载了cocos2d-x 2.0.1,希望跟书上统一起来,这样以后学习的时候可以参考书上的也不会遇到太

jstack Dump日志文件中的线程状态

jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注)  执行中,Runnable 等待资源,Waiting on condition(重点关注) 等待获取监视器,Waiting on monitor entry(重点关注) 暂停,Suspended 对象等待中,Object.wait() 或 TIMED_WAITING 阻塞,Blocked(重点关注)   停止,Parked 下面我们先从第一个例子开始分析,然后再列出不同线程

Git 中删除文档库的文件

情况一:文档库中还没加入任何文件,也就是执行 "git init" 之后,还没有执行过 "git commit" . 指令:git rm --cached 文件名 原理:"git rm 文件名"这条指令,Git 会执行两项检查: 1.Git 索引中有没有该文件的内容(刚刚有没有执行过 "git add 文件名" ),如果有,表示这个文件的内容和文档库中的不一样,为了避免遗失数据,Git 会显示提示信息,然后放弃执行. 2. 文

git中如何忽略文件上传?

使用原因:至于我们为什么要使用git忽略文件,原因很多.就比如我自己的情况吧!自己一个人多地方开发,为了代码同步,这样很方便.但是有个问题就是,我创建 的是开源项目,上面有一些服务器上面的配置信息,这不是全部暴露出去了,多不安全的.便开始使用这种方法.同时,我们在我们的团队开发中,也为了避免一些配 置文件多次上传到服务器上面.例如我们在本地开发,每个人的mysql密码不一致,每次每个人提交上去,岂不是每次这个 数据配置文件都要被提交并被修改一次,多麻烦.(至于git还有其他的作用,望大家在评论区

git中手动删除的文件如何在git中删除

在日常开发中,我们可能或手动删除(delete键删除的)一些文件,然而我们本来应该是用git rm fileName命令删除的,但是现在我们手动删除了,那么要如何在git里面讲那些手动删除的文件删除呢? 我们这里有两种方法可以在git中删除那些手动删除(delete键删除的)的文件: 第一种就是用 git rm files 删除你手动删除的文件或文件夹. 当然,如果你删除的文件有很多,而且分布在不同的文件夹中,使用第一种 git rm files 的方法,显然不方便,效率也很低下,那么有没有更快

git中忽略文件权限或文件拥有者的改变

在发布项目到线上时,很多时候需要修改文件的权限,如果是使用git版本管理软件来发布的话,那么下次更新线上文件的时候就会提示文件冲突.明明文件没有修改,为什么会冲突呢?原来git把文件权限也算作文件差异的一部分.下面笔者自己做了个简单的例子来演示这种情况. 1.修改版本库的文件的权限,然后使用diff查看下改变. $ chmod 777 pack.php $ git diff pack.php git文件权限修改示例 可以看到git把文件权限也列入了版本管理. 2.在另外一个地方clone这个版本