目 錄
2.1 文件添加及提交
文件添加
添加某個文件:git add file.c
添加所有文件:git add .
作用:
1)已經追蹤的文件:將修改從工作區保存到暫存區
2)未追蹤的文件:加入git追蹤範圍
文件提交
將暫存區的所有內容提交到版本庫
— 單步提交:git commit -m "commit info"
— 一次性提交:git commit -a
— 修改最後一次提交:git commit --amend #該提交會生成一個新的commit對象,替換先前的commit對象
注意:如果修改沒有保存到暫存區,是不會提交到版本庫的。
2.2 文件刪除
1)從工作目錄和暫存區中刪除
方式一:
首先從工作目錄中刪除,使用 rm -rf file.c
然後使用 git add file.c
最後進行提交 git commit -m "delete file.c"
方式二:
首先使用 git rm -f file.c
再進行提交 git commit -m "delete file.c"
避免文件出現在未跟蹤清單中
刪除並提交後,該文件就不再被版本庫追蹤,但是版本庫仍然有這些文件的快照
2)從暫存區中刪除,工作目錄保留
使用命令:git rm --cached file.c
包括:庫文件、可執行文件、日誌、臨時文件
3)從版本庫中刪除:版本回退到錯誤提交之前的版本
撤銷提交到暫存區:git reset --soft SHA-1(例如回退到上一個版本時SHA-1=HEAD^)
撤銷提交到工作區:git reset --mixed SHA-1
將工作區、暫存區和版本庫恢復到指定版本(不建議使用):git reset --hard SHA-1
注意:刪除也被認爲是修改,可以從版本庫中還原。
2.3 文件重命名
文件重命名:git mv old_file new_file,然後進行提交
重命名實際操作
文件移動:mv old_file new_file
刪除舊文件:git rm old_file
添加新文件:git add new_file
2.4 忽略指定格式的文件
有些文件不必提交到版本庫中
— 可執行文件、日誌文件、臨時文件、庫文件
忽略文件模式:glob模式匹配
— 忽略以#開始的行
— 忽略某種格式結尾文件:*.[ao]
— 某個庫文件除外,不忽略:!clib.a
— 忽略臨時文件:*~
— 忽略根目錄下的某個文件:/text
— 忽略某個目錄下的所有文件:libs/、libs/*.a
手動創建.gitignore文件
2.5 撤銷修改
撤銷工作區的提交
git checkout file.c
讓文件回到最近一次commit或add的狀態
若文件還沒添加到暫存區:撤銷後和版本庫一樣
若文件已添加到暫存區且做了修改:回到暫存區狀態
撤銷暫存區的內容
git reset HEAD file.c
將暫存區的修改撤銷掉,重新放回工作區
撤銷版本庫的提交
git reset --hard SHA-1(HEAD^)
回退版本,並刷新到工作區中,徹底丟棄先前修改的內容
先前的提交對象還在版本庫中孤獨地存在着(可以壓縮版本庫,釋放佔用空間)
2.6 差異比較
比較工作區和暫存區差異
git diff #查看尚未暫存文件有哪些新的修改
比較暫存區和版本庫差異
git diff --cached [HEAD]
git diff --staged SHA-1
查看已暫存文件和上次提交的快照之間的差異
比較工作區和版本庫差異
git diff HEAD(SHA-1) #查看尚未暫存文件和最新提交文件快照的區別
比較兩個版本之間差異
git diff 一個版本的SHA-1 另一個版本的SHA-1 #查看不同版本之間的差異
2.7 壓縮倉庫
壓縮版本庫
在日常運行中,git快照會佔用磁盤空間
git會在增量存儲單元中存儲修改
通過git gc命令壓縮增量存儲單元,節省磁盤空間
快照的存儲
對於修改的內容:做快照處理並保存
對於未修改的文件:做引用處理
查看git佔用磁盤空間大小:du -sh