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指令就可以看見
放截圖一張(碼的是我其他檔案名。。)
檔案添加到版本庫
//所有的版本控制系統,其實隻能跟蹤文本檔案的改動,比如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 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 status
readme.txt
被修改過了,但還沒有準備送出的修改。
//雖然Git告訴我們
被修改了,但如果能看看具體修改了什麼内容,自然是很好的。比如你休假兩周從國外回來,第一天上班時,已經記不清上次怎麼修改的
readme.txt
,是以,需要用
readme.txt
這個指令看看:
git diff
運作git diff檢視結果
git diff
顧名思義就是檢視difference,顯示的格式正是Unix通用的diff格式,可以從上面的指令輸出看到,我們在第一行添加了一個
distributed
單詞。
第一步add,然後檢視狀态,commit,檢視狀态,結果如圖
退回之前版本
再次修改檔案,如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
修改後送出
回想版本有如下的變化:
版本1:wrote a readme file版本2:add distributedGit is a version control system. Git is free software.
版本3:append GPLGit is a distributed version control system. Git is free software.
Git is a distributed version control system. Git is free software distributed under the GPL.
用git log檢視一下日志(ps:沒有圈起來的是我弄着玩的,不重要)
如果嫌輸出資訊太多,看得眼花缭亂的,可以試試加上
--pretty=oneline
參數
需要友情提示的是,你看到的一大串類似的是
3a5436998...
(版本号),和SVN不一樣,Git的
commit id
不是1,2,3……遞增的數字,而是一個SHA1計算出來的一個非常大的數字,用十六進制表示,而且你看到的
commit id
和我的肯定不一樣,以你自己的為準。為什麼
commit id
需要用這麼一大串數字表示呢?因為Git是分布式的版本控制系統,後面我們還要研究多人在同一個版本庫裡工作,如果大家都用1,2,3……作為版本号,那肯定就沖突了。
commit id
首先,Git必須知道目前版本是哪個版本,在Git中,用
HEAD
表示目前版本,也就是最新的送出
3a5436998...
(注意我的送出ID和你的肯定不一樣),上一個版本就是
HEAD^
,上上一個版本就是
HEAD^^
,當然往上100個版本寫100個
^
比較容易數不過來,是以寫成
HEAD~100
。
現在,我們要把目前版本
append GPL
回退到上一個版本
add distributed
,就可以使用
git reset
指令:
看看
readme.txt
的内容是不是版本
add distributed
:
果然被還原了。
用
git log
再看看現在版本庫的狀态:
發現最新的那個版本
append GPL
已經看不到了,再想傳回去怎麼辦
辦法其實還是有的,隻要上面的指令行視窗還沒有被關掉,你就可以順着往上找啊找啊,找到那個
append GPL
的
commit id
是
1094adb...
,于是就可以指定回到未來的某個版本:
版本号沒必要寫全,前幾位就可以了,Git會自動去找。當然也不能隻寫前一兩位,因為Git可能會找到多個版本号,就無法确定是哪一個了。
再小心翼翼地看看
readme.txt
的内容:
果然,我胡漢三又回來了。
Git的版本回退速度非常快,因為Git在内部有個指向目前版本的指針,當你回退版本的時候,Git僅僅是把HEAD從指向
HEAD
: 改為指向
append GPL
: 然後順便把工作區的檔案更新了。是以你讓
add distributed
指向哪個版本号,你就把目前版本定位在哪。
HEAD
現在,你回退到了某個版本,關掉了電腦,第二天早上就後悔了,想恢複到新版本怎麼辦?找不到新版本的
commit id
怎麼辦?
在Git中,總是有後悔藥可以吃的。當你用
$ git reset --hard HEAD^
回退到
add distributed
版本時,再想恢複到
append GPL
,就必須找到
append GPL
的commit id。Git提供了一個指令
git reflog
用來記錄你的每一次指令:
從輸出可知,
append GPL
的commit id是
3a5436998
,現在就可以通過commit id傳回任意一個版本。
更多内容請等待。。。