文件版本控制方式
將工作目錄的代碼先提交到暫存區,然后再由暫存區提交到本地倉庫。
git status:查看工作區、暫存區狀態
測試:
⒈在一個已經初始化的目錄下(例如test目錄下)創建文件test01.txt
⒉在里面寫點初始內容
例如:
⒊通過Git Bash Here打開Git的命令行工具
執行命令git status,查看效果
文件標識紅色表示文件還沒有被添加到Git中進行管理
接下來將文件添加到暫存區
git add [file name]:將工作區的信息(變化)添加到暫存區
再次觀察效果,文件變成綠色表示
git commit -m "msg" [file name]:將暫存區的內容提交到本地庫
將文件提交到本地庫之后,查看狀態,沒有任何文件展現,說明工作區,暫存區,本地庫中的文件信息處于同步(相同)狀態。
將本地庫中的文件進行修改,添加bbb
查看狀態,文件又變紅了,說明工作區有新內容,待添加到暫存區
重復首次操作,繼續add,然后繼續commit
最后查看狀態,確保工作區,暫存區,本地庫再次同步。
git log:查看本地庫更新歷史記錄
觀察到我們一共為本地庫,有提交過兩次記錄的記載
我們可以觀察到兩次提交,分別對應兩個40位的哈希值,這就是我們提交后記錄的版本號
這種形式查看歷史日志是最原始的查看方式
接下來我們也可以通過其他兩種方式來查看歷史
git log --oneline:查看本地庫更新歷史記錄(簡化版)
這樣做可以很簡單的展現歷史信息
這種形式展現的哈希值為簡化形式,通過也簡化了提交的日期時間以及作者。
git reflog:查看本地庫更新歷史記錄(展現HEAD指針)
這種形式可以展現HEAD指針編號位置,我們以后可以通過該位置定位到我們想要的版本歷史。
準備工作,在原有aaa和bbb的基礎上
新增歷史記錄ccc、ddd、eee、fff、ggg
可以使用git commit -am"msg"進行添加和提交一次性操作
準備工作后,開始前進和后退的操作
git reset --hard [局部索引值]:基于索引值的操作
通過以上操作,先以觀察哈希值的方式查看歷史
通過git reset --hard eee的哈希 回到歷史
最后觀察vi test01.text 文件是回到了eee的歷史版本
同時可以通過以上的方式,回到最新歷史版本ggg
觀察又回到了ggg的版本
在次觀察歷史
觀察到前進和回退的操作也會被忠實的記錄下來
git reset --hard HEAD^ :表示后退操作
一個^表示后退一步,N個^表示后退N步
觀察以上操作,我們通過后退的方式,后退到了fff
在進行以下操作前,可以先回到最新版本ggg
前提:刪除前,文件存在時的狀態提交到了本地庫
通過以上方式查看狀態,表示工作區、暫存區和本地庫處于同步狀態。
接下來,將test01.txt文件刪除
查看test文件夾狀態
通過以上觀察,表示工作區中少了文件,和本地庫不同步了,此時根據提示,我們可以將這次的刪除操作添加到暫存區,并提交的本地庫。
注意:刪除文件后的git操作,和添加文件后的git操作方式是一致的,也是先add,再commit
我們現在相當于徹底將這個文件刪除了,最新提交到本地庫的歷史也是處于將這個文件刪除的狀態了。
現在我們要將該文件找回!
由于我們以前提交過的每一個歷史版本都被忠實的記錄下來的,所以我們現在回到歷史就可以將文件找回了。(文件是被刪除了,但是歷史永遠不會被刪除)
查看歷史版本
通過以上歷史版本我們觀察到,最后一個版本af1eb78是刪除了文件,但是我們可以看到最新的加入ggg的版本為c8f70b0,此時還是有test01.txt這個文件的,我們可以回到c8f70b0這個版本。
通過我們以上學習過的 git reset --hard [版本號] 就可以實現了
通過以上操作,觀察test文件夾中又有test01.txt這個文件了
以上的操作是刪除文件后,已經將刪除狀態提交到本地庫了。
如果文件刪除后,刪除文件狀態只是在工作區,或者剛剛到暫存區,還沒有提交到本地庫,如何恢復文件呢?
使用 git reset --hard HEAD來進行恢復
git diff 文件名 : 將工作區中的文件和暫存區進行比較
測試前,首先確保工作區,暫存區,本地庫處于同步狀態
觀察當前最新版本(例如以下最新版本為ggg)
工作區新增hhh
接下來比較工作區中的該文件和暫存區的差別
通過觀察,看出工作區比暫存區多了hhh
還可以與本地庫的歷史版本進行比較
git diff 本地庫中歷史版本 文件名