前面的 GitHub 系列文章介紹過,GitHub 是基於 Git 的,因此也就意味着 Git 是基礎,若是你不會 Git ,那麼接下來你徹底繼續不下去,因此今天的教程就來講說 Git ,固然關於 Git 的知識單憑一篇文章確定說不完的,我這篇文章先介紹一些最基本的、最經常使用的一些 Git 知識,爭取讓大家 Git 速成。git
Git 是 Linux 發明者 Linus 開發的一款新時代的版本控制系統,那什麼是版本控制系統呢?怎麼理解?網上一大堆詳細的介紹,可是大多枯燥乏味,對於新手也很難理解,這裏我只舉幾個例子來幫助大家理解。github
熟悉編程的知道,咱們在軟件開發中源代碼實際上是最重要的,那麼對源代碼的管理變得異常重要:編程
好比爲了防止代碼的丟失,確定本地機器與遠程服務器都要存放一份,並且還須要有一套機制讓本地能夠跟遠程同步;windows
又好比咱們常常是好幾我的作同一個項目,都要對一份代碼作更改,這個時候須要你們互不影響,又須要各自能夠同步別人的代碼;緩存
又好比咱們開發的時候免不了有bug,有時候剛發佈的功能就出現了嚴重的bug,這個時候須要緊急對代碼進行還原;服務器
又好比隨着咱們版本迭代的功能愈來愈多,可是咱們須要清楚的知道歷史每個版本的代碼更改記錄,甚至知道每一個人歷史提交代碼的狀況;微信
等等等相似以上的狀況,這些都是版本控制系統能解決的問題。因此說,版本控制是一種記錄一個或若干文件內容變化,以便未來查閱特定版本修訂狀況的系統,對於軟件開發領域來講版本控制是最重要的一環,而 Git 毫無疑問是當下最流行、最好用的版本控制系統。工具
上面說了,Git 是一個版本控制系統,你也能夠理解成是一個工具,跟 Java 相似,使用以前必須得先下載安裝,因此第一步必需要安裝,我用的是 Mac , Mac 上其實系統自帶 Git 的,不過這裏統一提供一下各平臺的安裝方式,這部分就不過多介紹,相信你們這裏搞的定。學習
Linux:apt-get install git
安裝好 Git 以後,怎麼學習是個問題,其實關於 Git 有不少圖形化的軟件能夠操做,可是我強烈建議你們從命令行開始學習理解,我知道沒接觸過命令行的人可能會很抵觸,可是個人親身實踐證實,只有一開始學習命令行,以後你對 Git 的每一步操做才能理解其意義,而等你熟練以後你想用任何的圖形化的軟件去操做徹底沒問題。
我一開始教咱們團隊成員全是基於命令行的,過後證實他們如今已經深深愛上命令行沒法自拔,他們很理解 Git 每一步操做的具體含義,以至於在實際項目不多犯錯,因此我這裏也是基於命令行去教大家學習理解。
怎麼判斷你 Git 有沒有安裝成功?請在命令行裏輸入 git ,若是出現如下提示證實你已經安裝成功了。
Git 全部的操做命令開頭都要以 git 開頭,上面列舉了最經常使用的一些 Git 命令,緊接着會有一句英文解釋這個命令的意義,都不是很難的單詞,不妨試着看一下,不過沒有實際操做你仍然很差理解,下面咱們來以一個實際的操做來介紹下一些經常使用命令的含義。
第一步,咱們先新建一個文件夾,在文件夾裏新建一個文件(我是用 Linux 命令去新建的,Windows用戶能夠本身手動新建)
mkdir test (建立文件夾test)
cd test (切換到test目錄)
touch a.md (新建a.md文件)
這裏提醒下:在進行任何 Git 操做以前,都要先切換到 Git 倉庫目錄,也就是先要先切換到項目的文件夾目錄下。
這個時候咱們先隨便操做一個命令,好比 git status ,能夠看到以下提示(別糾結顏色之類的,配置與主題不同而已):
意思就是當前目錄還不是一個 Git 倉庫。
這個時候用到了第一個命令,表明初始化 git 倉庫,輸入 git init 以後會提示:
能夠看到初始化成了,至此 test 目錄已是一個 git 倉庫了。
緊接着咱們輸入 git status 命令,會有以下提示:
默認就直接在 master 分支,關於分支的概念後面會提,這時最主要的是提示 a.md 文件 Untracked files ,就是說 a.md 這個文件尚未被跟蹤,尚未提交在 git 倉庫裏呢,並且提示你可使用 git add <file> 去操做你想要提交的文件。
git status 這個命令顧名思義就是查看狀態,這個命令能夠算是使用最頻繁的一個命令了,建議你們沒事就輸入下這個命令,來查看你當前 git 倉庫的一些狀態。
上面提示 a.md 文件尚未提交到 git 倉庫裏,這個時候咱們能夠隨便編輯下 a.md 文件,而後輸入 git add a.md ,而後再輸入 git status :
此時提示如下文件 Changes to be committed , 意思就是 a.md 文件等待被提交,固然你可使用 git rm --cached 這個命令去移除這個緩存。
接着咱們輸入 git commit -m 'first commit' ,這個命令什麼意思呢? commit 是提交的意思,-m 表明是提交信息,執行了以上命令表明咱們已經正式進行了第一次提交。
這個時候再輸入 git status ,會提示 nothing to commit。
這個時候咱們輸入 git log 命令,會看到以下:
git log 命令能夠查看全部產生的 commit 記錄,因此能夠看到已經產生了一條 commit 記錄,而提交時候的附帶信息叫 'first commit' 。
看到這裏估計不少人會有疑問,我想要提交直接進行 commit 不就好了麼,爲何先要再 add 一次呢?首先 git add 是先把改動添加到一個「暫存區」,你能夠理解成是一個緩存區域,臨時保存你的改動,而 git commit 纔是最後真正的提交。這樣作的好處就是防止誤提交,固然也有辦法把這兩步合併成一步,不事後面再介紹,建議新手先循序漸進的一步步來。
branch 即分支的意思,分支的概念很重要,尤爲是團隊協做的時候,假設兩我的都在作同一個項目,這個時候分支就是保證兩人能協同合做的最大利器了。舉個例子,A, B倆人都在作同一個項目,可是不一樣的模塊,這個時候A新建了一個分支叫a, B新建了一個分支叫b,這樣A、B作的全部代碼改動都各自在各自的分支,互不影響,等到倆人都把各自的模塊都作完了,最後再統一把分支合併起來。
執行 git init 初始化git倉庫以後會默認生成一個主分支 master ,也是你所在的默認分支,也基本是實際開發正式環境下的分支,通常狀況下 master 分支不會輕易直接在上面操做的,大家能夠輸入 git branch 查看下當前分支狀況:
若是咱們想在此基礎上新建一個分支呢,很簡單,執行 git branch a 就新建了一個名字叫 a 的分支,這時候分支 a 跟分支 master 是如出一轍的內容,咱們再輸入 git branch 查看的當前分支狀況:
可是能夠看到 master 分支前有個 * 號,即雖然新建了一個 a 的分支,可是當前所在的分支仍是在 master 上,若是咱們想在 a 分支上進行開發,首先要先切換到 a 分支上才行,因此下一步要切換分支
git checkout a
執行這個命令,而後再輸入 git branch 查看下分支狀況:
能夠看到當前咱們在的分支已是a了,這個時候 A 同窗就能夠盡情的在他新建的a分支去進行代碼改動了。
那有人就說了,我要先新建再切換,未免有點麻煩,有沒有一步到位的,聰明:
git checkout -b a
這個命令的意思就是新建一個a分支,而且自動切換到a分支。
A同窗在a分支代碼寫的不亦樂乎,終於他的功能完工了,而且測試也都ok了,準備要上線了,這個時候就須要把他的代碼合併到主分支master上來,而後發佈。git merge 就是合併分支用到的命令,針對這個狀況,須要先作兩步,第一步是切換到 master 分支,若是你已經在了就不用切換了,第二步執行 git merge a ,意思就是把a分支的代碼合併過來,不出意外,這個時候a分支的代碼就順利合併到 master 分支來了。爲何說不出意外呢?由於這個時候可能會有衝突而合併失敗,留個包袱,這個到後面進階的時候再講。
有新建分支,那確定有刪除分支,假如這個分支新建錯了,或者a分支的代碼已經順利合併到 master 分支來了,那麼a分支沒用了,須要刪除,這個時候執行 git branch -d a 就能夠把a分支刪除了。
有些時候可能會刪除失敗,好比若是a分支的代碼尚未合併到master,你執行 git branch -d a 是刪除不了的,它會智能的提示你a分支還有未合併的代碼,可是若是你非要刪除,那就執行 git branch -D a 就能夠強制刪除a分支。
咱們在客戶端開發的時候常常有版本的概念,好比v1.0、v1.1之類的,不一樣的版本確定對應不一樣的代碼,因此我通常要給咱們的代碼加上標籤,這樣假設v1.1版本出了一個新bug,可是又不曉得v1.0是否是有這個bug,有了標籤就能夠順利切換到v1.0的代碼,從新打個包測試了。
因此若是想要新建一個標籤很簡單,好比 git tag v1.0 就表明我在當前代碼狀態下新建了一個v1.0的標籤,輸入 git tag 能夠查看歷史 tag 記錄。
能夠看到我新建了兩個標籤 v1.0、v1.1。
想要切換到某個tag怎麼辦?也很簡單,執行 git checkout v1.0 ,這樣就順利的切換到 v1.0 tag的代碼狀態了。
OK,以上全是一些最基本的Git操做,並且全是在本地環境進行操做的,徹底沒有涉及到遠程倉庫,下一章節將以遠程 GitHub 倉庫爲例,講解下本地如何跟遠程倉庫一塊兒同步協做,另外今天講的全是最基礎最簡單的Git操做,一步步來,後續再繼續講解一下Git的高階以及一些Git的酷炫操做。
另外,考慮到可能會有人嫌我講解的太基礎太慢,畢竟我是針對小白,因此得一步步來,火燒眉毛的想要提早本身學習的不妨在我公衆號 AndroidDeveloper 回覆「git」關鍵字,獲取一份我推薦的還不錯的 Git 學習資料,不謝,畢竟我這麼帥!
本文原創發佈於微信公衆號 AndroidDeveloper「googdev」,轉載請務必註明出處!