git相关整理(一)

1、git基本原理与概念:git

一个git仓库,能够被分为3个区域,分别是工做区,暂存区,版本库。ide

当一个文件,在git版本库中,会有三种状态:
ui

modified(已修改)  git工做区中新增了文件,或者原有文件被修改,没被提交到暂存区时,就是modified状态。spa

staged(已暂存)  当文件被被添加到暂存区后,就为staged状态。指针

committed(已提交)  文件从暂存区提交到版本库时的状态。对象


在工做区的文件会有两种状态:事件

untracked  未被版本库追踪。(好比说,在版本库的工做区目录里新增了一个文件,这个文件历来没有被增长到暂存区以及提交,那这个文件在工做区就是untracked状态)ip

tracked 版本库追踪状态,(已经提交过版本库,被版本库追踪的文件)it


2、经常使用操做。io

git init   #初始化一个git仓库。

git config --gloabl user.name "shz"  #配置代码提交人姓名

git config --global user.emall "shz.qq.com" #代码提交人邮箱

git config --global color.ui true  #显示颜色差别。(不一样的状态会有颜色差别)

配置参数以及配置文件位置:

--global 当前用户全局配置文件 ~/.gitconfig

--system:  修改全部用户的配置文件:/etc/gitconfig

   修改当前版本仓库的配置文件  .git/config


git add  [xxx] #将文件添加到暂存区。

git commit ["text"]  #将暂存区的文件提交到版本库。

git log #查看提交历史

git status # 查看当前git仓库中文件的状态。

git diff #能够查看一个文件在工做区和暂存区的差别。

git show  [SHA1] #查看一个具体的提交。

git clone #克隆一个远程仓库。


分支操做:

git branch  [xxx] 建立一个新的分支。

git checkout [xxx]  切换到指定分支。

git tag [v1.0]  添加一个标签。


其余操做:

git show  [SHA1] #能够看指定的某次提交对文件做出的修改(其实就是查看blob文件的内容。)

git cat-file -p [filename]  #查看git对象文件内容。

git cat-file -t [filename] #查看git对象文件类型。

 

3、git版本库目录介绍

branches  项目分支信息。

hooks      hooks脚本,特定事件触发。

info    里面有一个exclude 文件,这个文件用来指定忽略工做区的指定文件或者目录。

log     记录了历史commit记录或者删除记录。

objects  这里面真正的保存了修改的内容,以及commit,tree,blob,tag这四个对象。

refs  引用指针,用于指向本地(或远程)分支或tag的指针。

config 当前git项目的配置信息

HEAD  用于指向分支的最末端(最后一次提交)。

index 暂存区文件。

COMMIT_EDITNSG 最后一次提交的注释信息。

description git 项目描述信息。


4、git对象介绍:

git内部有四种数据对象类型,分别是blob,tree,commit,tag。

blob:用来存储文件的数据。

经过git show commit提交的哈希值  就能够看到blob对象内部的内容了。

例如:git show 0ba6f2a65f03788ac52e31aa7b2eb95731dc7437 就能够看到此次commit都作了哪些修改。


tree: 像一个目录树结构,用来管理其余tree和blob

tree维护的就是一个git仓库中的目录树结构,里面具体指向了哪一个tree或者哪一个blob 能够经过 git cat-file来查看。


commit:指向一个tree,用来标记某个目录文件某个时间点特定的状态。(每次提交代码到本地的版本库git commit后就会产生一个commit对象。)

commit对象主要有如下几个部分构成:

1.一个tree对象

2.父对象

3.做者

4.日期

5.提交者

为何要有父对象?

父对象指向了上一次提交的操做,当每次修改而后提交,commit对象自己并不会存储修改的内容,文件修改的内容都是经过和父对象的比较而来的。



tag: 用来指向一个commit。

其实git的分支,标签都是对commit对象作了一个指针,这个指针的存放路径在.git/refs下。

听说git内部有两种tag,一种就是commit指针,另一种tag是个完整的tag对象。

tag对象组成:

对象名,标签名,对象类型,标签建立这者名字。

tag标记会指向一个commit的SHA1.

tag标签与分支的最大区别是?

tag标签与分支虽然都指向一个commit,可是tag标签是一个常量指针,是不能改变的。

而分支确是一个变量指针。

git cat-file -p 能够查看标签内容。


5、经常使用操做详解。

1.将文件添加进暂存区。

git add [文件名]  #将一个文件添加进暂存区。

git add . #一次性添加当前工做区中全部的文件到暂存区。

#这一步操做能够将git仓库未追踪的文件加入到git仓库的追踪范围,若是文件已被git仓库追踪,那么就会将本次修改添加到暂存区中。


2.将暂存区的文件提交到本地代码库。

git commit -m "commit info" #单步提交,只执行将暂存区文件提交到版本库的操做。

git commit -a #一次性提交,将add到暂存区的操做也一并作了。(这种提交方式生产环境不推荐。)

git commit --amend  #修改最后一次提交。


3.文件删除。

#同时将某文件从工做目录和暂存区删除:

git rm  -f [filename]

# 若是经过rm命令直接进行删除,而后再commit提交,虽然git不会再追踪这个文件,可是,里面还会保存有已删除文件的快照。


#从暂存区中删除,在工做目录中保留.

git rm --cached  [xxx]


#从版本库中删除,版本回退到错误提交以前。

#将错误提交到版本库的数据回退到暂存区。

git reset -soft [SHA1]


#将错误的提交从暂存区回退到工做区。

git reset -mixed [SHA1]


#将工做区,暂存区,版本库恢复到指定版本。

git reset --hard SHA1


4.重命名。

git mv  [old_file] [new_file]

实际操做:

mv [oldfile] [newfile] 首先文件重命名。

git rm old_file  #删除

git add new_file #增长


5.撤销修改。

撤销对工做区的修改:

git checkout [filename]  #让工做区中的文件回到最近一次commit 或者 add 的状态。

#若文件还没添加到暂存区时,执行这条撤销语句,会变的和版本库中记录的同样。

#若文件已添加到暂存区并作了修改,则会回到暂存区的状态!


撤销对暂存区的修改:

git reset HEAD [filename] #将添加到暂存区的修改回退到工做区。


撤销对版本库的提交:

git reset --hard [sha1]


6.差别比较。

比较工做区和暂存区的差别。

git diff  #查看还没有加入到暂存区的文件有哪些新的修改。


查看暂存区和版本库的差别。
git diff  --cached  #默认参数是HEAD  就是和版本库中最后一次commit作比较。

git diff --staged 【SHA1】  #和版本库中的某个commit进行比较。



查看工做区和版本库的差别。

git diff HEAD【SHA1】


   

比较两个版本提交之间的差别。

git diff 【SHA1】[SHA2]

================================

相关文章
相关标签/搜索