原本不打算寫相關Git
系列教程,由於網上已有廖雪峯老師的《Git教程》,及扔物線老師的《Git原理及使用指南》,怕本身寫很差,寫不全,講不清。但本身學習 Git 後,又按捺不住想寫的衝動,因此最終我仍是動筆了。爲了讓初次接觸 Git 的小夥伴快速上手,整個系列不打算深刻的講解Git,而會將重心放在Git的經常使用概念及頻率較高的Git命令。同時又由於筆者是一名愛崗敬業的Android程序員,因此在文章中,我也會介紹Git相關指令在 IntelliJ IDEA
與 Android Studio
圖形化界面上的對應實現。java
總之,簡單一句話來講,整個系列文章能幫助你們,不只學到 Git 相關概念及 Git 相關命令的使用,還能熟悉圖形化界面上的操做。裝逼(論一個習慣命令行的程序員的自我修養),偷懶兩不誤~,還在等什麼呢?少年!!!come on ~git
整個系列的文章,結合了相關視頻與博客,在文章末尾或文章中都給出了相應學習連接。只有站在巨人的肩膀上,才能看的更遠~程序員
在咱們進行深度學習 Git
以前,我想給你們講個故事,時間回到咱們青春歲月的大學時代,在大四的小夥伴們,我相信你們都經歷過畢業論文👨🎓的折磨。在無數遍咒罵導師的時候,咱們將畢業論文改了一遍又一遍。《毫不修改版本1》,《修改剁手版本1》,《打死不改版本》,《改了,導師掛全家版本》....等等,隨着論文修改的版本次數增長與時間長短等其餘緣由。咱們或許已經忘記在相應版本中,咱們添加了什麼內容,刪除了哪些語句。想要從不一樣版本中找到咱們的歷史記錄,這是一項很是困難的事。算法
而版本控制系統
就能幫助咱們解決上述咱們遇到的問題。版本控制系統的主要目的是幫助你保留項目的詳細歷史記錄,而且可以在不一樣的版本上進行工做。保留詳細的項目歷史記錄很重要,由於這樣能夠看出一段時間內項目的進度。若是須要,你還能夠回到項目的某個階段,並恢復數據或文件。shell
版本控制其實就是
控制版本
,版本控制系統就是幫助咱們控制或管理某個事物的不一樣版本apache
如今市面上的控制系統有幾十上百種,可是最爲流行的版本控制系統爲下面三者:安全
儘管有着不一樣的版本控制系統,但其主要類別分爲兩種:服務器
在集中式模型中,有一臺功能強大的中央服務器託管項目。每一個每戶都必須經過這臺中央服務器。網絡
在分佈式模型中,沒有中央信息庫,每一個開發者的計算機都有一份完整的項目拷貝。由於每臺計算機都有完成的項目拷貝,這就意味着咱們能夠離線工做,不受網絡的限制了。框架
在該系列文章中,咱們將使用Git,它是分佈式版本控制系統。你可能據說過 GitHub
, Git
和 GitHub
是徹底不一樣的 Git 是版本控制工具。而 Github 是託管 Git 項目的服務,要使用 Git 項目,你未必要使用 GitHub 。可是 GitHub ,在後續文章中咱們也會講到。如今就把它當作能夠上傳你的項目副本的另外一臺計算機。若是如今沒有理解集中式,分佈式。也徹底沒有關係。這裏只是介紹一下他們運行的大概框架。
在學習Git以前,咱們有必要了解Git和版本控制術語,瞭解相關術語,有助於咱們更好的學習並使用Git。
版本控制系統(version control system 簡稱VCS
)是一個管理源代碼不一樣版本的工具。源代碼管理器(source code management 簡稱 SCM
)是版本控制系統的另外一個名稱。
Git 是一個 SCM(所以也是 VCS!)。Git 官方網站的 URL 是 Git-scm.com/(注意它的域名中直接包含「SCM」!)。
Git 將數據看作微型文件系統的一組快照。每次 commit(在 Git 中保持項目狀態),它都對文件當時的情況拍照,並存儲對該快照的引用。你能夠將其看作遊戲中的保存點,它會保存項目的文件和關於文件的全部信息。
你在 Git 中的全部操做都是幫助你進行 commit,所以 commit 是 Git 中的基本單位。
倉庫是一個包含項目內容以及幾個文件(在 Mac OS X 上默認地處於隱藏狀態)的目錄,用來與 Git 進行通訊。倉庫能夠存儲在本地,或做爲遠程副本存儲在其餘計算機上。倉庫是由 commit 構成的。
工做目錄是你在計算機的文件系統中看到的文件。當你在代碼編輯器中打開項目文件時,你是在工做目錄中處理文件。
與這些文件造成對比的是保持在倉庫中(在 commit 中!)的文件。
在使用 Git 時,工做目錄與命令行工具的 current working directory (當前工做目錄)不同,後者是 shell 當前正在查看的目錄。
檢出是指將倉庫中的內容複製到工做目錄下。
Git 目錄下的一個文件,存儲的是即將進入下個 commit 內容的信息。能夠將暫存區看作準備工做臺,Git 將在此區域獲取下個 commit。暫存索引中的文件是準備添加到倉庫中的文件。
SHA
是每一個 commit 的 ID 編號。如下是 commit 的 SHA 示例:
e2adf8ae3e2e4ed40add75cc44cf9d0a869afeb6。
複製代碼
它是一個長 40 個字符的字符串(由 0–9 和 a–f 組成),並根據 Git 中的文件或目錄結構的內容計算得出。SHA 的全稱是"Secure Hash Algorithm"(安全哈希算法)。若是你想了解哈希算法,能夠參考SHA家族。
分支是從主開發流程中分支出來的新的開發流程。這種分支開發流程能夠在不更改主流程的狀況下繼續延伸下去。
回到以前關於遊戲保存點的示例,你能夠將分支看作在遊戲中設立保存點後,嘗試一個有風險的招式。若是有風險的招式不奏效,則回到保存的位置。令分支很是強大的關鍵之處是你能夠在一個分支上設定保存點,而後切換到另外一個分支並繼續設定保存點。
在Git的工做流程主要圍繞三個部分,工做區,暫存區與倉庫區。當你第一次在使用Git時,可能不太容易意識到有這三個不一樣的區域。由於你並不會在計算機的文件中看到任何可見的修改。但Git的確管理者這三個區域。
在Git中若是你建立了一個空倉庫,Git可以分辨從未見過的文件,如上圖中的紅色的A
文件,若是咱們須要經過Git來跟蹤咱們的文件,咱們須要將文件添加到倉庫中,可是咱們不能直接將這些文件直接移動到倉庫區中。上述A文件必須先移動到暫存區,咱們可使用 git add
指令將A
文件更改移動到暫存區(暫存區能夠存放全部即將
提交的文件)。當文件提交到暫存區中後,咱們可使用git cmomit
指令將A
文件移動到倉庫區去。
關於
git add
與git commit
這兩個指令,在接下來的文章中會進行講解。須要注意的是隻有暫存區的內容纔會被提交到倉庫中去。
一樣的修改倉庫中的文件,也須要先將修改的文件先添加到暫存區中,而後從暫存區提交到倉庫。
若是說咱們想查看咱們的提交信息怎麼辦呢?針對每一個提交,Git都會爲其建立一個 ID(SHA)
,每一個提交的ID,也就是SHA的前七個字符以下圖所示:
站在巨人的肩膀上,才能看的更遠~