此篇文章是根据自己理解的程度写出来的,难免会有错误,还望见谅!
git可以看成有三个空间,分别是working directory、stage area(Index,Cache)、history
工作目录下的文件放在working directory中
1,文件提交与撤销
在这三个空间中的提交过程与撤销过程相关命令如下图所示
git add 用于提交文件从working directory到stage area
git commit用于提交文件从stage area到history
git commit -a用于提交文件直接从working directory到history
git reset用于撤销文件与git commit过程相反
git checkout用于撤销文件与git add过程相反
git checkout HEAD用于撤销文件与git commit -a提交过程相反
2,文件差异
git diff用于区别某一文件在working directory与stage area的区别
git diff --staged用于区别某一文件在stage area与history的区别
git diff HEAD用于区别某一文件在working directory与history的区别
3,其他命令
git status:可以列出当前目录所有还没有被git管理的文件和被git管理且被修改但还未提交(git commit)的文件
git status -s:前两个标志位,第一个表示stage area到history的文件状态,第二个表示working directory到stage area的文件状态。例如working directory中的文件做了修改,但是并没有git add到stage area空间中,第一个状态会是M,再例如,如果working directory中文件改了名称,第一个状态会是R。
git rm file //删除文件
git rm --cached file //删除stage area中的file,但保留working directory中的文件
git mv README.txt README.md //把文件README.txt更名为README.md
git stash //相当于把此时git中的所有东西放在一个抽屉中
git stash pop //把文件从抽屉中拿出来
这个命令一般用于需要紧急修复的时候,一般不会用
4,图解commit对象
git中有很多对象,commit是其中一种,前面所说的history也可以说是commit history。
commit对象是git commit之后放在history空间里的对象,commit对象会有多次修改,每次修改的时候都会有一个新的commit对象指向之前的commit对象,如下图
每个commit对象都会一个tree对象,还有parent对象等等,tree可以指向一个文件,也可以指向另外一个tree对象(下图中的三角形代表tree对象)
每个commit对象都会有一个编号(哈希码),40字节
此刻执行git cat-file -p HEAD命令:
tree d626gdyg2663....(40字节)
parent 234r48hfhcub....(40字节)
author ...
commiter ...
HEAD指向的commit对象的前一个可以用HEAD~表示(或者master~),
在往前一个可以用HEAD~~表示(或者master~~),或者HEAD~2(master~2),
例如git rev-parse HEAD~2命令:
cc65dhehkdjfc....
5,branch分支
git branch //列出所有分支
git branch tryidea //创建tryidea分支
git checkout tryidea //切换当前分支
git branch -d tryidea //删除分支
git checkout -b tryidea //创建分支并立即切换
git merge tryidea //合并分支
合并分支有两种方法,Fast-Forward和3-way Merge
此处的两种方式就不细讲了。
此处贴上一个我觉得特别好的git教程,希望可以帮助到大家!