基本概念:
Git對(duì)象:
查看對(duì)象類(lèi)型
git log --pretty=raw --graph e672332
打印提交對(duì)象之間的互相關(guān)聯(lián)的跟蹤鏈,--pragh顯示parent屬性,沒(méi)有parent即為起點(diǎn)
顯示當(dāng)前分支
git branch ? ??
HEAD,master分支,和refs/heads/master區(qū)別
使用master代表分支master中最新的提交,也可以使用全稱(chēng)refs/heads/master或heads/master
使用HEAD代表版本庫(kù)中最近的一次提交
符號(hào)^可以用來(lái)只帶父提交,如:
HEAD^代表版本庫(kù)的上一次提交,即最近一次提交的父提交(即倒數(shù)第二次提交)
HEAD^^代表HEAD^的父提交
Git重置
git reset可以將游標(biāo)指向任意一個(gè)存在的提交ID
git reset –hard HEAD^將master重置到上一個(gè)老的提交中,此時(shí)提交歷史也會(huì)改變
使用git reset重置命令很危險(xiǎn),會(huì)徹底的丟失歷史
使用Git reflog來(lái)挽回錯(cuò)誤的重置
#git reflog show master |head -5
7250a94 master@{0}: HEAD^: updating HEAD
df208c4 master@{1}: commit: leavewelcome.txt alone
7250a94 master@{2}: merge 7250a:Fast-forward
a2d0352 master@{3}: commit: 5th commit
67fba85 master@{4}: master@{3}: updatingHEAD
重置master為2次提交之前的值:
git reset –hard master@{2}
git檢出
git branch -v查看當(dāng)前分支
git chackout master切換到master分支上
git checkout branch檢出branch分支
git merge ac23224將處于分離頭指針狀態(tài)的提交于當(dāng)前分支合并
基本操作:
刪除文件:
git rm ww.txt在版本庫(kù)的最新提交中刪除文件,在歷史提交中還在。而直接在工作區(qū)刪除文件,對(duì)暫存區(qū)和版本庫(kù)沒(méi)有任何影響。
移動(dòng)文件:
直接先使用linux的重命名:mv welcome.txt README
然后添加即可: git add ?-A
回復(fù)刪除的文件:
最簡(jiǎn)潔實(shí)用的語(yǔ)句:git checkout HEAD~1 -- ??welcome.txt
選擇性添加文件:?
git add -i使用交互式界面添加文件
文件忽略:
.gitignore的作用范圍時(shí)其所出的目錄及其子目錄
Git的文件忽略只是對(duì)未入庫(kù)(untrack)的文件起作用
Git的忽略語(yǔ)法:
1.忽略文件中的空行或以#開(kāi)始的行會(huì)被忽略
2.可以使用通配符,*代表任意多字符,?代表單字符,[abc]代表可選字符范圍
3.如果名稱(chēng)的最前面是一個(gè)路徑分隔符(/),表明要忽略的文件在此目錄下,而非子目錄的文件
4.如果名稱(chēng)的最后面是一個(gè)路徑操作符(/),表明要忽略的是一整個(gè)目錄,同名文件不忽略,否則(即沒(méi)有/的話)同名的文件和目錄都忽略。
5.在名稱(chēng)的最前面添加一個(gè)感嘆號(hào)(!),代表不忽略
如:
*.a ??#忽略所有以.a為擴(kuò)展名的文件
!lib.a ??#但是lib.a文件或目錄不要忽略,即使是前面設(shè)置了對(duì)*.a的忽略
doc/*.txt ?#忽略文件如doc/notes.txt ,但是文件如doc/serve/arch.txt不被忽略
/TODO ?#只忽略此目錄下的TODO文件,子目錄的TODO文件不被忽略
build/ ??#忽略build/目錄下所有的文件