1. 命令初识
查看GIT版本
git --version
在Global级别设置UserName(推荐使用)
git config --global user.name ’Freud Kang‘
在当前目录界别设置UserName(优先级高)
git config user.name 'Freud Kang'
在Global级别设置UserEmail
git config --global user.email ’luoyan35714@126.com‘
初始化一个GIT Repository(仓库)
git init
下载远程代码仓库
git clone remote_url
添加file到.git/index空间Staging area
git add ‘file’
提交所有修改到Repository
git commit -m ’Commens For Commit‘
讲此目录下所有修改的文件添加到Staging area并提交
git commit -a -m ’Commens For Commit‘
在GIT仓库中删除文件
git rm 'file'
(LINUX)sha1 file 查看sha1加密后的文件值(20byte即160bit~2的160次方种情况)
从Repository中检出在工作目录丢失或者误操作的文件。
git checkout -f HEAD || git checkout -f fileName
查看文件在经过SHA1加密后的字符串
git hash-object ’FileName‘
查看反加密后的文件内容
(BLOB)git show ’SHA1加密字符串(只需唯一标识此字段的前几位即可)‘
查看反加密后的Tree对象的内容
(TREE)git ls-tree ’SHA1加密字符串(只需唯一标识此字段的前几位即可)‘
查看反加密后的Commit对象的内容
(COMMIT)git show -s --pretty=raw ’SHA1加密字符串(只需唯一标识此字段的前几位即可)‘
查看此对象的类型(BLOB.TREE.COMMIT)
git cat-file -t ’SHA1加密字符串(只需唯一标识此字段的前几位即可)‘
查找此目录下的FILE类型的文件
find ./git/objects/ -type f
查找此目录下Directory类型的文件
find ./git/objects/ -type d
统计FILE类型的文件个数
find ./git/objects/ -type f | wc -l
给当前最新的commit打一个TAG(轻量级),对象个数不会增加,只是会在.git/refs/tags/tagname文件中添加一个Commit HASH Code的引用
git tag “tag_name”
给当前最新的commit打一个TAG(重量级),会在.git/objects下生成一个新的tag对象,并在.git/refs/tags/tagname文件中添加一个tag HASH Code的引用(好处:可以添加更多的注释)
git tag -a 'TAG_NAME' -m 'Commens'
把某个TAG的源码打包成为zip文件,其中目录为打包后zip的首目录。
git archive --format=tar --prefix='目录' Tag_Name | gzip > 文件名
压缩文件名 解压缩文件
tar zxvf
查看分支,有*的代表当前工作分支
git branch
创建分支
git branch ’分支名字‘
切换到需要活动的分支
git checkout ’分支名字‘
从源分支把代码Merge到本分支
git merge ’源分支名字‘
删除分支(大写D代表强制删除,小写d代表普通删除)
git branch -D ’分支名字‘
git branch -m <old_name> <new_name>
git checkout <branch_name>
git checkout -b <new_branch_name> (<from_branch_name>)
刪除 local branch
git branch -d <branch_name>
删除远程Branch
git push origin :{branch_name}
检出一个远程的Branch
git checkout -b develop origin/develop
2. Git Area(3种空间)
Working directory工作目录,指没有添加到GIT Track中的文件,GIT不认识此文件
Staging area阶段空间,指添加到GIT的track中但是还没有Commit过的空间,.git/index指的就是staging area,需要从Working Directory中Add进入此空间
Repository仓库,指的是本地.git 文件夹下的东西,当Commit之后./git/objects目录下的对象值得就是此仓库,需要从Staging Area中Commit进来
3. 对象(Object)一旦修改永远不可以改变
blob文件对象:不包含文件名,不包含数据大小
tree目录对象:包含文件名
commit提交对象:包含Tree对象
TAG对象:可以认为是一个对象或者是引用
4. 引用(Reference)可以动态修改
Branch :master是缺省分支,创建完Branch后会在.git/refs/heads/BranchName下有分支名字的文件,其内容为所指向的Commit对象40位HASH值
HEAD(永远指向当前活动的Branch)在.git/HEAD文件中存储一个引用指向refs/heads/master,此文件中有HASH值即COMMIT对象的HASH值
Remote Branch
5. Merge
Faster-Forward
Three-Way Merge
NOTES:
.git/objects/**/************* 第一个**指的是SHA1加密后的前两位,第二个指的是后38位
我的GitHub
https://github.com/luoyan35714