天天看點

Git學習筆記(持續更新)

Linux環境安裝Git

首先測試一下有沒有安裝Git,直接上代碼:

$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git//這個就是Linux下安裝的指令了
           

Windows 安裝Git

    1、官網下載下傳安裝程式。

    2、開始菜單找到Git-->Git Bash,彈出黑視窗,安裝成功。

    3、安裝完成,進行設定

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
           

        //因為Git是分布式版本控制系統,是以,每個機器都必須自報家門:你的名字和Email位址。

        //注意git config指令的--global參數,用了這個參數,表示你這台機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的使用者名和Email位址。

Git建立版本庫repository

$ mkdir gitrepository
$ cd gitrepository
$ pwd  //顯示目前目錄
/h/gitrepository
$ git init  //通過git init指令把這個目錄變成Git可以管理的倉庫
Initialized empty Git repository in H:/gitrepository/.git/  
           

//空的倉庫(empty Git repository)

//.git目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄裡面的檔案,不然改亂了,就把Git倉庫給破壞了    

//如果沒有看到.git目錄,那是因為這個目錄預設是隐藏的,用ls -ah指令就可以看見

放截圖一張(碼的是我其他檔案名。。)

Git學習筆記(持續更新)

檔案添加到版本庫

    //所有的版本控制系統,其實隻能跟蹤文本檔案的改動,比如TXT檔案,網頁,所有的程式代碼等等,Git也不例外。

    //千萬不要使用Windows自帶的記事本編輯任何文本檔案。原因是Microsoft開發記事本的團隊使用了一個非常弱智的行為來儲存UTF-8編碼的檔案,他們自作聰明地在每個檔案開頭添加了0xefbbbf(十六進制)的字元,你會遇到很多不可思議的問題,比如,網頁第一行可能會顯示一個“?”,明明正确的程式一編譯就報文法錯誤,等等,都是由記事本的弱智行為帶來的。

    //Notepad++的預設編碼設定為UTF-8 without BOM     set-utf8-motepad++

寫一個readme.txt,内容:

Git is a version control system.

Git is free software.

 //一定要放到gitrepository目錄下(子目錄也行),因為這是一個Git倉庫,放到其他地方Git再厲害也找不到這個檔案。

    第一步,用指令git add告訴Git,把檔案添加到倉庫:$ git add readme.txt

    第二步,用指令git commit告訴Git,把檔案送出到倉庫:

Git學習筆記(持續更新)

    //簡單解釋一下git commit指令,-m後面輸入的是本次送出的說明,可以輸入任意内容,當然最好是有意義的,這樣你就能從曆史記錄裡友善地找到改動記錄。

    //git commit指令執行成功後會告訴你,1 file changed:1個檔案被改動(我們新添加的readme.txt檔案);2 insertions:插入了兩行内容(readme.txt有兩行内容)。

    為什麼Git添加檔案需要add,commit一共兩步呢?因為commit可以一次送出很多檔案,是以你可以多次add不同的檔案,比如:

    $ git add file1.txt

    $ git add file2.txt file3.txt

    $ git commit -m "add 3 files."

修改檔案内容

Git is a distributed version control system.
Git is free software.
           

運作git status檢視結果

Git學習筆記(持續更新)

//git status

指令可以讓我們時刻掌握倉庫目前的狀态,上面的指令輸出告訴我們,

readme.txt

被修改過了,但還沒有準備送出的修改。

//雖然Git告訴我們

readme.txt

被修改了,但如果能看看具體修改了什麼内容,自然是很好的。比如你休假兩周從國外回來,第一天上班時,已經記不清上次怎麼修改的

readme.txt

,是以,需要用

git diff

這個指令看看:

 運作git diff檢視結果

Git學習筆記(持續更新)

git diff

顧名思義就是檢視difference,顯示的格式正是Unix通用的diff格式,可以從上面的指令輸出看到,我們在第一行添加了一個

distributed

單詞。

第一步add,然後檢視狀态,commit,檢視狀态,結果如圖

Git學習筆記(持續更新)

退回之前版本

再次修改檔案,如下:

Git is a distributed version control system.
Git is free software distributed under the GPL.
           

修改後送出

Git學習筆記(持續更新)

回想版本有如下的變化:

版本1:wrote a readme file
Git is a version control system.
Git is free software.
           
版本2:add distributed
Git is a distributed version control system.
Git is free software.
           
版本3:append GPL
Git is a distributed version control system.
Git is free software distributed under the GPL.
           

 用git log檢視一下日志(ps:沒有圈起來的是我弄着玩的,不重要)

Git學習筆記(持續更新)

如果嫌輸出資訊太多,看得眼花缭亂的,可以試試加上

--pretty=oneline

參數

Git學習筆記(持續更新)
 需要友情提示的是,你看到的一大串類似

3a5436998...

的是

commit id

(版本号),和SVN不一樣,Git的

commit id

不是1,2,3……遞增的數字,而是一個SHA1計算出來的一個非常大的數字,用十六進制表示,而且你看到的

commit id

和我的肯定不一樣,以你自己的為準。為什麼

commit id

需要用這麼一大串數字表示呢?因為Git是分布式的版本控制系統,後面我們還要研究多人在同一個版本庫裡工作,如果大家都用1,2,3……作為版本号,那肯定就沖突了。

首先,Git必須知道目前版本是哪個版本,在Git中,用

HEAD

表示目前版本,也就是最新的送出

3a5436998...

(注意我的送出ID和你的肯定不一樣),上一個版本就是

HEAD^

,上上一個版本就是

HEAD^^

,當然往上100個版本寫100個

^

比較容易數不過來,是以寫成

HEAD~100

現在,我們要把目前版本

append GPL

回退到上一個版本

add distributed

,就可以使用

git reset

指令:

Git學習筆記(持續更新)

看看

readme.txt

的内容是不是版本

add distributed

Git學習筆記(持續更新)

果然被還原了。

git log

再看看現在版本庫的狀态:

Git學習筆記(持續更新)

發現最新的那個版本

append GPL

已經看不到了,再想傳回去怎麼辦

辦法其實還是有的,隻要上面的指令行視窗還沒有被關掉,你就可以順着往上找啊找啊,找到那個

append GPL

commit id

1094adb...

,于是就可以指定回到未來的某個版本:

Git學習筆記(持續更新)

版本号沒必要寫全,前幾位就可以了,Git會自動去找。當然也不能隻寫前一兩位,因為Git可能會找到多個版本号,就無法确定是哪一個了。

再小心翼翼地看看

readme.txt

的内容:

Git學習筆記(持續更新)

果然,我胡漢三又回來了。

Git的版本回退速度非常快,因為Git在内部有個指向目前版本的

HEAD

指針,當你回退版本的時候,Git僅僅是把HEAD從指向

append GPL

Git學習筆記(持續更新)
改為指向

add distributed

Git學習筆記(持續更新)
 然後順便把工作區的檔案更新了。是以你讓

HEAD

指向哪個版本号,你就把目前版本定位在哪。

現在,你回退到了某個版本,關掉了電腦,第二天早上就後悔了,想恢複到新版本怎麼辦?找不到新版本的

commit id

怎麼辦?

在Git中,總是有後悔藥可以吃的。當你用

$ git reset --hard HEAD^

回退到

add distributed

版本時,再想恢複到

append GPL

,就必須找到

append GPL

的commit id。Git提供了一個指令

git reflog

用來記錄你的每一次指令:

Git學習筆記(持續更新)

從輸出可知,

append GPL

的commit id是

3a5436998

,現在就可以通過commit id傳回任意一個版本。

更多内容請等待。。。