Git是一种分布式文件管理系统,但是在设计的时候,是按照一个文件系统来进行设计,而非文件管理系统来进行设计。所以在很多的设计思想上和设计理念上和普通的文件管理系统有很大区别:
- 版本文件的管理方式不一样,Git对文件不同的版本是保留完整的原始副本,而非其他文件版本控制工具一样,仅保留变化值。在本地仓库中,.git文件中保留了所有的版本文件。同一文件的不同版本靠不同的哈希值来进行区分。
- 文件分为,工作区,暂存区和仓库区,工作区中的内容只是仓库的快照版本,最终所有文件的确定都要以仓库区为准。Git中有3类对象:blob,tree和commit对象。所有仓库区的对象都存储在 ./git/objects文件夹中,所有文件的命名采用hash值来进行命名,下面来说一下对于objects文件夹中的一些常用操作:
- 查找文件夹下面所有的普通文件:find .git/objects -type f
- 显示git文件的文件类型: git cat-file -t ”文件哈希值前四位”
- 显示git中blob文件的内容: git show ”文件哈希值前四位”
- 显示git中tree文件的内容:git ls-tree ”文件哈希值前四位”
- 显示git中commit文件的内容:git show -s --pretty=row ”文件哈希值前四位”
Git中一个commit对象,必定对应一个tree对象;所有分支的合并和冲突管理,都是在commit对象级别上来进行的。
- 合并的时候,先将代码切换到使用的分支 git branch “”分支名A“”;然后执行 git merge “”要合并的分支名B“”。如果B是在A的基础上进行的修改,则git默认执行fast-forward合并。
- git log :查看git 的commit提交历史。
- git reset : 默认的参数是 --mixed,将commit回滚到指定的版本,修改回到工作区中,此时commit的话需要使用 git commit -a -m 参数; --soft参数,将commit回滚到指定的版本,修改回到暂存区中,此时提交的话使用 git commit -m参数即可; --hard参数,完全回到某个指定的版本,此时git status是clean的,不需要进行提交。
- git revert:在 git log 的基础上在生成一个新的版本,之前的版本继续保留。
- git中对任何工作区文件的修改都需要使用git add加入到暂存区。不能直接加入。