【Git】2. Git常用命令詳解、版本切換原理


一、新增文件

1、設置用戶簽名

簽名的作用就是為了區分不同的人,方便查看版本的時候知道操作的人是誰。首次安裝好git之后必須設置一下簽名,否則無法提交代碼。
另外,這里設置的簽名跟你登錄到遠程倉的賬號沒有關系。

git config --global user.name 用戶名
git config --global user.email 郵箱

2、初始化本地庫

想通過git管理文件目錄,首先要讓git獲取到管理權,所以要初始化。

git init


初始化成功,提示初始化了一個空的git倉庫.git,這里的文件就別改動了,可以打開看看。

3、查看本地庫狀態

初始化本地庫之后,就可以查看本地庫的狀態了。

git status


看下返回的3行分別說了啥:

  1. 本地庫在master分支,master是默認生成的。
  2. 目前還沒有提交過任何東西。
  3. 除了沒有提交過,而且現在還沒有什么東西需要你提交。

這時候新增一個文件的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文件里的版本號也會變更為對應的。

用示意圖來描述的話,其實在我們剛提交完第三個版本的時候,應該是這樣的:

當我們切換版本的時候,其實就是指針變了,比如現在切換到第二版本:

接下來,到了分支相關了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM