首先聲明,本書的知識總結來源於《完全學會Git,GitHub,Git Server的24堂課》一書,如有任何疑問請參考原書內容查證,我這裏更多的只是記錄,也會盡量結合自己的學習和使用經驗加一些自己的體會。Git安裝請移步至Git中文官網或者百度一下
1,本篇內容
本篇主要介紹一下在Git中如何通過指令進行文件夾中文件,已添加索引文件以及倉庫中文件的比對以及如何倉庫中取出文件,主要內容包括:
- 文件差異性比較
- 從倉庫中取文件
- 修改文件名稱
- 暫存文件或者文件夾狀態
- 清理文件
2,詳細內容
2.1 文件的差異性比較
我們知道,文件有三種,一種是放在文件夾中,一種是已經添加到索引的,還有一種是已經提交到倉庫的。所以,比較不同文件之間的差異性對應的指令也不太一樣;書中有一張圖很好,但是我這邊不太方便放,所以我就簡單列舉一下:
- git diff(difftool) fileName:表示比較文件夾文件與索引中或者倉庫中的區別
- git diff(difftoll) --cache fileName:表示比較索引中與倉庫中文件的差異性
- git diff(difftoll) 節點 fileName:表示比較索引中與倉庫中文件的差異性
- git diff(difftool) 節點1 節點2 fileName:表示比較倉庫中兩個簡單文件的差異性
- git diff --no-index fileName1 fileName2:表示比較文件夾中兩個文件的差異性
下面簡單演示一下幾條語句的實際操作效果:
上面是使用git diff指令查看,可能不是很明顯,我們可以通過上週學習的設置的BCompare來實現,下面就來看一下比對效果:
可見,最後一條比較文件夾中的文件指令,並沒有出現我們的比對工具。
2.2 從文檔庫中取文件
這部分相對簡單,主要就是git checkout的指令的延伸,我們可以根據添加不同的參數來取不同的文件,不同節點的文件等等功能
- git checkout 節點標識 fileName1 fileName2 ...
在這裏,有一點需要特別注意,那就是我們取出的文件內容和Git中最新版本該文件內容不一致時,這個取出的文件內容會自動記錄到索引中,之後執行commit指令的話,該文本的內容會更新到最新的版本中,如果需要避免這個問題,在取出文件後執行下面指令清除Git索引:
- git reset HEAD
這裏我只演示前半部分,後半部分就不演示了:
其實除了通過文件名進行文件查找外,還可以通過字符串進行文件查找:
- git grep 'string content' 節點標識:查找指定節點含有字符串的文件
- git grep -e 'string1' -e 'string2' 節點標識:查找指定節點含有字符串1或者2的文件
- git grep -e 'string1' --and -e 'string2' 節點標識:查找指定節點含有字符串1和2的文件
上面字符串之間與或關係還可以組合進行,比如下面這一條:
git grep \(-e 'string1' -e 'string2'\) --and \(-e 'string3' -e 'string4'\) 節點標識
2.3 修改文件的名稱
兩種方式:
- 先使用PC 資源管理器修改,添加再提交,Git會判斷文件內容,如果一樣則刪除文檔庫中文件,添加最新提交文件
- 直接通過git mv oldName newName,然後提交即可
下面就來看一下:
上面的示例演示通過git mv指令修改e.txt爲ee.txt,在通過windows資源管理器方式把ee.txt改爲e.txt。
2.4 暫存文件的狀態與清理Git文檔庫
暫存文件的狀態指的是暫存當前文件夾中文件的內容,然後把最新的節點文件同步到本地文件夾,我們結合最新的節點進行其他的工作開發,然後再恢復到之前文件的狀態,主要的指令如下:
- git stash save:存儲Git追蹤文件與最新節點文件之間的差異性,並把被追蹤的文件還原成成最新節點的文件
- git checkout 節點標識 . :取出執行上面指令時保存在文檔庫中文檔版本
- git stash pop/apply:取出暫存文件,併合併到當前文件夾文件中
上面說的有點饒人,下面看一下具體的演示就明白了:
關於上面需要注意一下:
(1)因爲我暫存狀態之後,沒有做任何操作,比如你提交了一次commit之後,那麼後面的取對比文件版本就使用:
git checkout HEAD^1 .
(2)注意,比較不同狀態文件內容之間的差異性
關於清理Git文檔(也即垃圾回收gc)這一塊;我們主要先了解一下幾條指令的概念:
- git gc :執行默認的清理流程
- git gc -aggresive:比較細緻的檢查和清理文件,耗時,不建議常用
- git gc --auto:會先判斷當前Git庫是否需要清理
- git gc --no-prune:要求Git不要清理不使用的文件,只需要整理即可。
後續每週固定更新4篇左右,共24課,預計5-6周更新完成。歡迎掃碼關注: