一、新增文件
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文件里的版本號也會變更為對應的。
用示意圖來描述的話,其實在我們剛提交完第三個版本的時候,應該是這樣的:
當我們切換版本的時候,其實就是指針變了,比如現在切換到第二版本:
接下來,到了分支相關了。