Git基本概念及常用命令详解

版本控制
  目前主流的版本控制系统主要有集中式版本控制系统Centralized Version Control Systems(简称 CVCS)和分布式版本控制系统(Distributed Version Control System,简称 DVCS)两种,主流代表分别是SVN和Git。
    CVCS这类系统,都通过一个单一的服务器,集中保存所有文件的修订版本、提交历史记录等信息,开发人员通过客户端连到这台服务器,取出最新的文件或者提交更新。因此它的主要缺点就是单点故障问题,比如在SVN服务器宕机期间,任何人都无法提交代码、还原、对比等。
  而DVCS这类系统,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来(即对远程代码仓库的完整备份),包括所有历史更新等。所以在服务器发生故障时,可以用任何一个本地仓库恢复。 

Git与SVN的区别
  
Git属于一个分布式版本控制系统,单点故障时可以用本地仓库恢复。
  Git的提取操作是对整个代码仓库的完整备份(形成本地仓库),而SVN的提取只是拉取最新文件。
  Git不关心文件内容前后的差异,只关心文件整体是否发生变化。而SVN会存储每个文件与初始版本之间的差异内容。  
  Git在commit时只是将文件修改提交到本地仓库,而非远程仓库。而SVN则会提交到中央服务器。
  Git只有在pull或push时才需要连接服务器网络,其它操作都在本地完成,操作的都是本地仓库。
   
Git下载安装 https://git-scm.com/downloads
    
创建Git仓库(git init、git clone)
    git init用来生成一个本地仓库,而git clone用来克隆远程仓库。
   在任意一个目录(一般会在某个项目下)执行git init后,会在当前目录下会生成.git目录,即初始化一个仓库,但项目里的文件并没有被Git跟踪(即让Git感知文件),此时通过git status会查发现所有文件都在Untracked files下。
    git clone [url],默认会在当前目录下生成libgit2目录,并在libgit2目录中生成一个.git文件夹,clone是对远程仓库的完整备份

Git项目主要目录结构说明
  工作区:即项目所在目录。
  Git仓库/版本库:对应工作区下的.git目录。它主要保存Git项目的元数据和对象数据库的地方,如日志变化、版本信息等。
  暂存区/索引:对应.git/index文件,它是一个文件,保存了下次将提交文件列表信息。本质上它是一个文件索引的目录树,包含了文件的基本属性信息,如文件名、大小、时间戳等等,但不包含文件内容。
  对象数据库:对应.git/objects目录,保存了文件的真实内容。
  HEAD文件:指向当前所在的分支,切换分支后,该文件内容会随之指向新分支。

Git项目的基本工作流程,及对应文件的三种状态介绍
1)在工作区中修改文件。
2)暂存文件,将文件的快照放入暂存区域。
3)提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
以上三个流程中,文件状态分别对应
1)  已修改: 是指文件已修改,但尚未保存到暂存区。
2)已暂存: 是指对文件的修改已经保存在了暂存区(即index文件中),但还没有提交到本地仓库
3)已提交: 对文件的修改已经提交,已经存储到了本地仓库。
这里有个值得注意的地方:Git中的commit提交操作,默认只会提交已被暂存的文件,对于未被的暂存的并不会提交,如新增文件。  

Git的常用命令
git status [file]  (-s参数可更简短的显示)
查看Git项目中文件的状态,结果有以下几种情况
如果出现working director clean,则表示当前工作空间是干净的,即所有的修改都已提交,并且不存在未跟踪的文件。
如果出现Untracked files,则说明有未被跟踪的文件,通常是工作区内新创建的文件。
如果出现Changes not staged for commit,则说明文件被修改但尚未被暂存。
如果出现Changes to be committed,则说明文件已处于暂存状态,但尚未被提交。
一个文件有可能出现后面两种情况,这说明该文件暂存之后,又被修改了,但后续修改却没有暂存。git会发现暂存区中有该文件的索引(即处于暂存状态),但索引代表的元数据与最新文件不一样,即可以认为上次暂存后文件被修改过。

git add
  
git add是一个多功能的命令,它会跟踪文件,同时将文件加入暂存区,也可以在合并时将有冲突的文件标记为已解决状态。注意:每次执行add都交将文件添加到暂存区,即建立索引,还会将文件内容写入对象数据库.git/objects,该索引会指向相应的.git/objects。所以同一个文件
  通过git add可以将文件或目录交由Git跟踪,对于不需要追踪的文件,比如上面的target, .project, .classpath, .setting,可以在当项目目录下创建一个名为 .gitignore 的文件,列出要忽略的文件模式,Git将忽略符合这些模式的文件,如下

   
git rm 
    如果不小心将这些不必要的文件交由Git跟踪了,可以通过该命令将文件或目录从 Git 中移除,即不再被Git跟踪。
    git rm xxx,该命令会将文件从暂存区中移除,同时也会从工作目录中删除,这样就永远不用再担心还会不小心被跟踪到。
    git rm --cached xx,则只会删除暂存区中的数据(即不交由Git管理),并不会删除工作目录中的数据。
    git rm -r xx,即递归删除。

git mv
  文件重命名,该命令相当于以下三个命令,所以重命名后的文件已经处于暂存状态。

$ mv a.txt b.txt
$ git rm a.txt
$ git add b.txt

git commit
  注意,commit只会提交文件最近暂存的那个版本,而那并不一定与当前文件一样,所以在提交前最好通过git status确认一下,还有什么修改过的或新建的文件还没有git add过。
  git commit -a,在提交时Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过add步骤,注意这里不包含未被跟踪的文件(如新建未执行add操作的文件) ;
      
git commit -m可以在提交时直接指定注释信息。
      git commit --amend:重新提交,如果在上次提交后,所有文件未做任何修改,只是想新增加一些文件或修改注释等,这个时候,如果你不想在历史记录中产生过多的提交记录,可以使用该命令。该命令会覆盖上次提交记录。

git log:查看历史提交记录

git reset
     
如下,假如你add(或rm)了一个文件到暂存区,可以通过git reset来取消文件的暂存状态。


git checkout
   
 恢复文件内容到上个版本,相当于重新检出文件,并覆盖当前目录下的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值