一、新增檔案
1、設定使用者簽名
簽名的作用就是為了區分不同的人,方便檢視版本的時候知道操作的人是誰。首次安裝好git之後必須設定一下簽名,否則無法提交程式碼。
另外,這裡設定的簽名跟你登入到遠端倉的賬號沒有關係。
git config --global user.name 使用者名稱
git config --global user.email 郵箱
2、初始化本地庫
想通過git管理檔案目錄,首先要讓git獲取到管理權,所以要初始化。
git init
初始化成功,提示初始化了一個空的git倉庫.git
,這裡的檔案就別改動了,可以開啟看看。
3、檢視本地庫狀態
初始化本地庫之後,就可以檢視本地庫的狀態了。
git status
看下返回的3行分別說了啥:
- 本地庫在master分支,master是預設生成的。
- 目前還沒有提交過任何東西。
- 除了沒有提交過,而且現在還沒有什麼東西需要你提交。
這時候新增一個檔案的hello.txt
,再用git status
看這裡就不一樣了。
出現一個新行:Untracked files
,未被追蹤的檔案,紅色標記。說明這個檔案只在工作區,但是沒有被git追蹤。
最後一行的描述也變了,說目前還沒有提交檔案,但是存在未被追蹤的檔案。
4、新增暫存區
git的提示做的還是很友好的,基本上都會給你操作提示。接著上面來,現在如何讓檔案被追蹤,提示說了,用git add
。
git add
出現一個warning
,說的是換行符自動替換處理,因為那個檔案我直接在git-bash視窗用linux命令新建的,所以自動轉化了win用的CRLF,不用管它。
現在重新檢視下git status
。
綠了,綠了,只不過不是古天樂(這是一個傳奇頁遊廣告的梗),而是剛才的hello.txt
檔案。
5、刪除暫存區
現在這個檔案也只是在暫存區裡,暫存區裡的檔案是可以刪掉的。如果現在我不想讓這個檔案產生一個歷史版本,那麼要在提交到本地倉庫之前刪掉它,就在暫存區刪吧。
同樣git也給了提示。
git rm --cached <file>
成功刪除,但是記住這裡刪的是暫存區的,你本地工作區的檔案沒動,用ll
檢視一下。
6、提交本地庫
把檔案重新提交到暫存區,接下來就可以提交到本地庫,形成一個歷史版本了。
git commit -m "日誌資訊" 檔名
提交成功,看提示資訊:
- [master (root-commit) a70616d],這裡的
a70616d
就是版本號了,這個是簡短版的。 - 1 file changed, 19 insertions(+),1個檔案被改變,插入了19行資訊(文字里有19行內容)。
7、檢視版本資訊
剛才提交本地庫產生一個版本資訊,可以用這個命令檢視。
git reflog
顯示了剛才提交的版本資訊。
a70616d
是版本號。(HEAD -> master
代表指標指向這個第一個版本。
還可以用這個命令檢視更相信的版本資訊:
git log
可以看到這裡的版本號很長a70616d3fc1c69f948a7b0d4ed2b640bedb1e747
,這個就是完整版的版本號了。
二、檔案被修改後
上面是新增一個檔案,但是最多的場景還是同一個檔案被反覆修改,現在我去修改hello.txt
檔案,增加寫內容,然後git status
。
提示有一個檔案被修改了,紅色表示還沒有被追蹤,那麼重複上面的動作,提交到暫存區即可,用git add
。提交成功了再次檢視。
最後再提交本地庫。
這裡看到最後的提示,有一行新增,一行刪除,可是我只是在第一行後面繼續增加了內容。
因為git裡面是按照行來維護檔案的,我修改了第一行內容,實際上對於git來說,要先刪除掉之前的第一行內容,然後再增加修改後的第一行內容。
現在檢視版本資訊git reflog
。
可以看到:
- 有2個版本資訊。
- 此時的指標是指向第二個版本。
三、版本穿梭
比如現在我想回退到之前某一個歷史版本。
先檢視歷史版本,git reflog
,目前我有3個版本。
我現在要回到第二次提交的版本,複製出版本號,使用如下命令:
git reset --hard 94ca3de
此時我再檢視版本,發現指標已經移到了第二次提交的版本上了。
至於,第一行是告訴你做了一個reset的操作,目標版本號是什麼。
git切換版本的原理
底層其實是移動HEAD指標。
可以先開啟本地的.git
下的HEAD,可以看到裡面指標指向master,說明當前是在master分支上。
接著,可以開啟.git/refs/heads/
下面的master,可以看到裡面的內容就是當前所在版本的版本號。
當繼續切換版本到a70616d
的時候,master檔案裡的版本號也會變更為對應的。
用示意圖來描述的話,其實在我們剛提交完第三個版本的時候,應該是這樣的:
當我們切換版本的時候,其實就是指標變了,比如現在切換到第二版本:
接下來,到了分支相關了。