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
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:沒有圈起來的是我弄着玩的,不重要)
如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline
參數
需要友情提示的是,你看到的一大串類似
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
命令:
看看readme.txt
的內容是不是版本add distributed
:
果然被還原了。
用git log
再看看現在版本庫的狀態:
發現最新的那個版本append GPL
已經看不到了,再想返回去怎麼辦
辦法其實還是有的,只要上面的命令行窗口還沒有被關掉,你就可以順着往上找啊找啊,找到那個append GPL
的commit id
是1094adb...
,於是就可以指定回到未來的某個版本:
版本號沒必要寫全,前幾位就可以了,Git會自動去找。當然也不能只寫前一兩位,因爲Git可能會找到多個版本號,就無法確定是哪一個了。
再小心翼翼地看看readme.txt
的內容:
果然,我胡漢三又回來了。
Git的版本回退速度非常快,因爲Git在內部有個指向當前版本的
HEAD
指針,當你回退版本的時候,Git僅僅是把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返回任意一個版本。
更多內容請等待。。。