上一篇介紹了Git中的一些基本概念。本篇來實際看一看如何通過幾個常用命令來快速上手Git,完成版本管理的日常操作(核心操作)。
0. 准備工作
安裝Git后,請先在你的電腦上新建或選擇一個目錄作為測試用,本教程大部分操作都將在該目錄下完成。
另外,我們的操作都是在命令行下完成的,如果你用的是Windows,可以通過右鍵菜單打開Git Bash這個Git命令行環境:在資源管理器中進入該目錄,點擊右鍵,在右鍵菜單中點擊“Git Bash”即可打開Git Bash並自動定位到當前目錄下:

1. 簡單配置
進入你的測試目錄,在Windows中用前面的方法打開Git Bash后就已經在測試目錄下了。接下來,由於這是安裝后第一次運行Git,我們需要做一點簡單配置:
$ git config --global user.name "your name"
$ git config --global user.email "your email"
為了在多人合作時能區分每個人的身份,所以我們需要告訴Git我們是誰。Git有很多設置選項,只有名字和email是一開始就必須設置的,其他大部分都是用來提高工作效率的,我們暫時不去關心。
這里簡單解釋一下這個命令,Git的所有命令都遵循相同的格式:
$是命令提示符,本篇中會在介紹每個命令時以該字符開頭,這樣就能很方便地知道這是一條命令了git是主命令,用來告訴Shell我想運行git程序config是子命令。Git中的操作都是通過子命令來完成的,git命令本身基本不做什么事情,它根據指定的子命令調用相應的子程序來干活。請記住Git的這種工作模式,后面我在稱呼Git命令時會忽略git這個主命令,直接用xx命令來稱呼子命令。例如config命令、add命令、commit命令等等- 再后面的就是傳遞給子命令的具體參數了。后面在介紹具體命令的時候會同時介紹一些常用參數。
2. 創建版本庫
下面就來在我們的測試目錄中創建一個版本庫玩玩。創建版本庫非常簡單:
$ git init
不需要任何參數,只要一個init命令就可以在當前目錄下創建一個版本庫。成功后,就會在當前目錄下生成一個隱藏的.git目錄,這個就是Git的版本庫,而當前目錄就成為了工作區。
現在版本庫還是全新的,里面只有少量的初始配置數據,還沒有任何的版本提交記錄等信息。工作區暫時也是新的,里面還沒有需要被Git管理的文件。
3. 修改與提交
現在我們在當前目錄(工作區)中隨意創建一個文件例如hello.c。好了,這個文件目前已經處於Git的“監管”中了。你在該文件中所做的任何改動都會被Git看在眼里。
現在就來試一試,用你喜歡的任何編輯器打開該文件,在里面輸入一段內容並保存,然后在Git Bash中輸入以下命令:
$ git status
顯示結果如下:

status命令用來顯示工作區當前的狀態,例如有哪些文件有改動,哪些文件是新增的等等。從結果可以看出來,工作區中新增了一個hello.c文件,並且該文件正處於untracked狀態。
untracked的意思是這個文件正被Git“監視”着,但還沒有記錄在案。這時候如果你刪除了新創建的文件,或者在編輯器中把最新的修改撤銷掉了,Git的態度是“事不關己高高掛起”的。
要想讓文件真正被Git管理起來,我們需要把這個文件提交到版本庫中。也就是讓Git把關於這個文件的一些信息記錄下來,比如什么時候修改的,由誰修改的、修改了哪些內容,等等。向版本庫中提交一個文件需要2個步驟,以我們剛才創建的hello.c文件為例:
$ git add hello.c
$ git commit -m "create hello.c"
第一步add命令用來將文件標記為可以提交的,從而消除了文件的untracked狀態。你可以在執行commit命令之前用add添加任意數量的文件,這樣下次commit時就會將這些文件一起提交到版本庫。實際上,add命令會把文件添加到一個叫做暫存區(stage)的地方,暫存區是版本庫中的一個臨時場所,如下圖所示(圖片來自廖雪峰老師的網站):

文件從添加到暫存區開始就會受到Git的保護,假如工作區中該文件丟失了,我們可以從暫存區中恢復它。
暫存區的另一個主要功能或者說優點是它可以用來標記出哪些文件是需要提交的而哪些是暫時不想提交的。因為有時候我們的工作區中有很多文件都被修改過,但某一次提交可能只想提交其中的一部分,其他的,例如還沒有最終完成的功能,或者一個只修復了一半的bug等,這些文件我們暫時不想提交。這是很常見的情況,利用暫存區可以很方便地滿足這種需求。
暫存區只是臨時的,我們的最終目標是將修改后的文件提交到版本庫中。commit命令用來將暫存區中的文件提交到版本庫,並且在版本庫中形成一個新的版本記錄。commit需要一個-m參數,用來對本次提交做出說明。例如提交了哪些文件、修改了什么地方、或者修復了哪個bug等。默認情況下說明信息是必需的,為每次提交寫一點描述也是一個很好的習慣,我們應當養成並堅持這一習慣。
4. 比較修改前后的差異
很多時候,我們在決定將一個文件提交到版本庫之前希望能夠確認一下修改的內容。這時候就可以使用diff命令:
$ git diff hello.c
Git提供的diff命令和Linux下常用的diff差不多,輸出格式也基本一樣。如下圖所示:

diff命令會將工作區中該文件的內容與暫存區中內容或版本庫中最后一次提交的內容做對比,並顯示兩者的差異。如果這個文件之前被添加到了暫存區但還沒有提交,那么比較的將是工作區和暫存區之間的差異;否則就會比較工作區和版本庫中最后一次提交的內容之間的差異;如果暫存區和版本庫中都沒有該文件的記錄(例如文件是新建的)那么將不會執行比較(什么都不顯示)。
從圖中可以看出來,相比上次提交,hello.c文件新增加了一行:# I will code it later^M(這個^M了解Windows和Linux差異的應該都清楚吧)。
5. 另一種創建版本庫的方法:克隆
init用來創建一個全新的版本庫。但有時候我們並不是想創建一個新的版本庫,而是希望將別的地方已有的版本庫復制一份過來。例如公司的代碼服務器上的公共版本庫,你希望將其復制一份到自己的電腦上。或者你希望把你在GitHub上的某個版本庫復制一份到本地,等等。
這時候,我們就可以使用克隆命令,命令中的url是要克隆的版本庫的訪問地址:
$ git clone url
關於這個后面介紹GitHub時再細說。
6. 總結
本節介紹了以下幾個常用命令:
status命令用來查看工作區的當前狀態init命令用來在當前目錄下初始化一個版本庫diff命令用來比較文件在工作區和版本庫(或暫存區)之間的差異add命令用來將工作區中修改過的文件添加到暫存區commit命令將暫存區中的文件提交到版本庫clone命令是另一種創建版本庫的方法,它將另一個版本庫復制一份到當前目錄下(clone命令暫時只需了解即可)
Git中最常見的一組操作是修改文件->比較差異->放到暫存區->提交到版本庫,掌握了這幾個操作對應的命令以后就算入門了,可以初步利用Git管理你的代碼了。
下一節會更介紹另外幾個實用的命令,從而更好地完成修改->提交操作。
如果覺得本文對你有幫助請順手點個贊吧
