Git系列筆記之二:建立本身的版本庫

咱們在上一節介紹了git及一些簡單的配置,具體在各個平臺上(如Linux、windows)的安裝,能夠參考廖雪峯老師的博客上的文章(傳送門html


1、建立本身的版本庫

版本庫,又名倉庫,英文名:repository,咱們能夠把它當作是一個目錄,git能管理這個目錄裏的全部文件,包括對這些文件的修改、刪除的跟蹤。git

建立版本庫很簡單,假設咱們須要新開發一個項目,那麼咱們首先建立一個新的目錄,做爲這個項目的工做區vim

上面咱們建立項目目錄gitTest並進入這個目錄。windows

執行 git init 命令,在當前工做目錄建立git,那麼在當前目錄下就會有一個隱藏的.git目錄,全部的記錄都會在這個目錄中。測試

接下來咱們直接建立一個測試的html文件,並用vim進行編輯,寫入html基本結構,保存後退出,如今這個index.html是沒有被跟蹤的spa

咱們使用 git add index.html 命令來說剛建立的index.html文件添加到暫存區,這時咱們尚未將新建的文件提交到倉庫,只是放在了暫存區指針

OK,接下來咱們把這個新的文件提交到倉庫htm

咱們能夠看到,index.html已成功提交到了倉庫,在 git commit 後面加上了-m參數,後面寫上這次提交的說明,這是很是有必要的。開發

好了,接下來咱們對index.html作出修改,向HTML文件裏添加一個p標籤,並寫入一些信息,而後咱們使用 git status 來查看下當前文件狀態,結果以下:get

上面第一排的On branch master表示咱們正在master分支上,下面的紅色部分說明index.html已被修改

如今咱們把修改添加到暫存區,以後再次查看下當前狀態

紅色部分沒有了,這表示修改已提交到了暫存區,接着咱們把它提交到倉庫並附上說明

如今有個問題,若是咱們對文件作了更改,但沒有提交,而咱們又想知道文件到底作了哪些更改呢?咱們再次爲index.html添加第二個p標籤,並寫入一些內容

當咱們對index.html再次作出更改後,咱們用 git diff 命令來查看最近有些更改

從上圖能夠看出,第二個p標籤前面有個+號,表示這段代碼是咱們後面加入的,但並無提交,好了咱們知道了上次對文件作了哪些更改,就能夠對更改後的文件作提交了


2、版本回退

咱們來試想下,上面顯示了一個建立和兩次對文件內容的更改(添加),並且內容都不多,若是咱們在幾個月內對一個或多個文件作了成百上千此更改呢?有誰會記得這些,好了,咱們可使用 git log 來查看歷史修改記錄

能夠看到咱們每次在修改以後提交到倉庫的動做,都記錄在這裏,不過好像有點不太清楚,OK,咱們在命令後面加上參數 --pretty=oneline

這樣就舒服多了,如今咱們來作回退的工做,若是最近一次的修改你並不滿意,但修改量很大,並且也記不清是哪些地方作了修改,咱們就使用 git reset  來回退到上一個版本,那麼要回退,必需要讓git知道咱們須要回退到那個版本,在git中,HEAD 用來表示當前版本,上一個版本使用 HEAD^ 表示,上上一個版本使用HEAD^^表示,那100個呢?不是要寫100個^?呵呵,像這樣的狀況咱們使用 HEAD~100 來表示。好,咱們如今來把index.html的內容回退到上一個版本,在作這個操做以前,咱們先使用cat index.html來查看下當前index.html的內容是怎樣的。

接着咱們使用git reset --hard HEAD^來回退到上一個版本

好了,沒有錯誤提示,咱們再次查看下index.html的內容,發現文件內容已回退到了上一個版本,也就是沒有第二個P標籤的時候

完成上面的操做後,咱們回到了咱們但願的版本,次日一睡醒,完了,後悔了,這麼辦?這個好辦,咱們使用命令 git reflog 來查看咱們的每次操做

能夠看到,咱們作的第三次操做的commitid是:469e0de,好了,有這個就好辦了,咱們再次執行 git reset --hard 469e0de

再次cat一下index.html的內容

看到了嗎?剛剛的第二個p標籤又回來啦!


3、工做區和暫存區

工做區(Working Directory)

就是你在電腦裏能看到的目錄,好比個人gitTest文件夾就是一個工做區

版本庫(Repository)

工做區有一個隱藏目錄 .git,這個不算工做區,而是Git的版本庫。

Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支 master,以及指向 master 的一個指針叫HEAD

咱們把文件往Git版本庫裏添加的時候,是分兩步執行的:

第一步是用 git add 把文件添加進去,實際上就是把文件修改添加到暫存區;

第二步是用 git commit提交更改,實際上就是把暫存區的全部內容提交到當前分支。

由於咱們建立Git版本庫時,Git自動爲咱們建立了惟一一支 master 分支,因此,如今,git commit 就是往 master 分支上提交更改。

你能夠簡單理解爲,須要提交的文件修改統統放到暫存區,而後,一次性提交暫存區的全部修改。


4、管理修改

Git管理的是修改,而非文件,好比新增是一個修改,刪除也是一個修改,更改了某些字符也是一個修改,刪了一些又加了一些也是一個修改,甚至建立一個新文件也算一個修改。

好比有一個文件,咱們第一次作了修改,而後 git add 了,這時咱們再次作了一次修改,並無add,而是直接 git commit 了,git diff下就能夠看到,git commit 是將暫存區的修改提交到了倉庫,而第二次的修改並無 add 到暫存區,因此看到的只是第一次修改的結果。

咱們也可使用 git diff -- index.html 這樣的命令來查看工做區與倉庫之間的文件差別,若是沒有返回結果,那麼這兩處的結果是同樣的。

5、撤銷修改

當咱們的工做量很大時,必須會在編寫代碼時出錯,這時,咱們來分析下下面的幾種狀況:

一、咱們寫錯了代碼,並無提交到暫存區,也就是沒有執行 git add 操做,這時你發現了錯誤,OK,咱們執行 git checkout -- file 命令,撤銷工做區的修改,返回到跟暫存區版本一致。

二、咱們寫錯了代碼,並且已經提交修改到了暫存區,但沒有commit,這時,咱們執行 git reset HEAD file ,丟棄暫存區的修改,這樣就返回到了上面的階段,而後再次執行上面的 git checkout -- file就能夠了。

三、咱們寫錯了代碼,不但提交到了暫存區,並且已經commit了,這時,能夠參看上面的版本回退部分,不過前提是沒有提交到遠程倉庫。


6、刪除文件

在Git中,刪除也是一種修改操做,下面咱們用一個實例來討論下。首先咱們建立一個test.txt文件,並把它提交到倉庫

這時,咱們直接在工做區將這個文件刪除

咱們使用 git status 來查看下

git告訴咱們,test.txt已被刪除了,由於它發現了工做區和版本庫的不一致了,這時,咱們有兩個選擇,一是直接刪除版本庫裏的test.txt ,另一種就是刪錯了,要從版本庫裏恢復

下面,咱們首先來恢復被誤刪的test.txt,使用 git checkout -- test.txt 命令

被刪除後,項目目錄裏沒有test.txt,當咱們恢復文件後,就出如今目錄裏了

若是咱們肯定要刪除,那麼咱們可使用 git rm 命令來執行刪除操做

相關文章
相關標籤/搜索