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 ’[email protected]‘
初始化一個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