Git是一種分佈式文件管理系統,可是在設計的時候,是按照一個文件系統來進行設計,而非文件管理系統來進行設計。因此在不少的設計思想上和設計理念上和普通的文件管理系統有很大區別: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加入到暫存區。不能直接加入。