1. 程式人生 > >Git入門——遠端倉庫及分支管理

Git入門——遠端倉庫及分支管理

關於本地版本庫的操作,請見: Git入門——本地版本庫操作 本篇提到的所有命令: 小結 前面提到,Git相對於傳統的SVN有著很大的優勢,其中之一就在於集中式系統中,版本庫只能存在於中央伺服器上;而在Git中,版本庫可以克隆多個,甚至在同一臺主機中也可以克隆多個版本庫。當然,日常開發過程中,還是會有一臺主機充當中央伺服器的角色,作為整個專案的整體基準。我們可以自己搭建一個git伺服器,也可以直接使用github所提供的免費倉庫託管服務。 在本文中我們使用GitHub。在使用之前,需要註冊GitHub賬號,並且在本地與GitHub上設定SSH,具體操作請參照:SSH設定 一、遠端倉庫的新增與克隆         1、關聯本地倉庫

      首先在GitHub網站上建立倉庫

        建立完成後,我們可以選擇將這個庫克隆至本地,也可以將本地已經建立好的庫關聯至遠端庫,這裡我們關聯。
        a、使用git remote add origin 倉庫地址命令將遠端庫與本地庫關聯         倉庫地址有兩種形式,https形式: https://github.com/zhuwq585/DataStructure-JavaScript.git       ssr形式: [email protected]:zhuwq585/DataStructure-JavaScript.git         使用https形式則每次需要輸入使用者名稱密碼且速度慢,使用ssr形式就直接呼叫先前配置的ssr金鑰進行認證,無需輸入使用者名稱密碼。
        b、使用git push -u origin master命令將本地倉庫推送至遠端庫                     這時就可以在github上看到推送的檔案了
        2、從遠端倉庫克隆         還是老辦法,先在GitHub上建立倉庫。使用git clone 遠端庫地址命令克隆倉庫。                  之後新增檔案,提交併使用git push命令推送至遠端倉庫即可。
            二、分支管理
        分支是一個在多人協作開發中非常有用的功能,開發不同部分的人可以建立各自的分支,在不影響別人的情況下工作,待開發完成後再合併至主分支。Git的分支功能非常高效。每次commit操作都會生成一個新的版本,各個版本按照時間的順序串接起來就是一條版本時間線。當建立了分支之後,我們可以擁有並行的多條時間線,並在合適的時候把其它的分支合併到總分支(master)上,這就是分支的功能。  關於分支的概念,
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000 中的圖畫的非常形象         1、 建立分支
       使用 git branch 分支名 建立分支 使用 git branch 檢視分支 標註*的是當前分支        使用 git checkout 分支名 切換分支                使用 git branch -d 分支名 刪除分支      
       ·可以使用git checkout -b 分支名 建立分支並直接切換至該分支
       ·當前分支無法被刪除         2、合併分支         使用git merge 分支名 命令將所選分支合併到當前分支上                  這裡建立了test1分支,並在此分支上新增並提交了test.txt檔案。此時切換至master分支,我們會發現剛才新增的test.txt檔案不見了。使用merge命令合併分支之後,剛才新增的檔案又回來了。
        直接使用merge命令會預設用Fast forward模式進行合併,等於是將另一分支的下一個版本直接指向當前的提交。這樣的話,一旦刪除分支之後,該分支資訊便會丟失。  若是在合併分支的時候加上--no-ff引數,則會強制禁用Fast forward模式,合併時會生成一個新的提交,將兩個分支的下一版本指向該提交。這樣便不會丟失分支資訊。         3、解決衝突         在合併分支的時候,若兩個分支都對同一個檔案的同一部分進行了修改提交,則會發生衝突。這個時候就需要使用者手動解決衝突,再行合併。這裡我們新增一個test.txt檔案,建立兩個分支,在這兩個分支上同時修改該檔案並嘗試提交合並:    
        這個時候git會提示我們發生了衝突,無法合併分支,衝突發生在test.txt中。status命令可以看到更多詳情。這個時候,檔案系統中的test.txt檔案也已經標出了衝突位置。如下圖:  git使用<<<<<<< ======= >>>>>>>進行衝突位置提示 其中<<<<<<<與=======之間的部分是當前分支的修改,=======與>>>>>>>之間是其它分支的提交。     這個時候,我們把衝突位置修改為正確的文字,再進行合併:   
使用log命令可以看到分支合併的情況。使用git log --graph命令可以看到分支合併圖:   
        4、工作區暫存
        有時候,我們在進行手頭工作的時候,會突然轉向其它緊急工作,比如Bug修復等等,這個時候因為手頭工作尚未完成,不能進行提交。而Git中是必須提交後才能切換分支進行工作的。這個時候工作區暫存功能就非常有用。我們可以使用git stash命令儲存工作區狀態。 待其它工作完成後,再使用git stash apply恢復工作區,使用git stach drop刪除工作區暫存檔案。使用git stach list可以檢視儲存的工作現場。可以暫存多個工作區狀態,這個時候就需要在apply等命令後加上list命令中查詢到的暫存檔名。            恢復工作區與刪除暫存檔案可以用一條命令git stach pop直接完成。

三、分支與遠端庫         可以使用git remote命令檢視遠端庫資訊
  
        1、將分支推送至遠端庫
        使用git push origin 分支名將本地分支上的所有提交推送到遠端庫。            2、從遠端庫抓取分支         建立遠端分支的本地分支,使用git checkout -b 分支名 origin/分支名命令,同樣的,這條命名可以分成branch和checkout兩步命令。有時需要將本地分支與遠端分支建立連結,這時使用git branch --set-upstream 分支名 origin/分支名命令。         當連結建立完畢後,有時需要將遠端分支的最新提交抓取到本地,這時使用git pull命令,將遠端分支提交抓取至本地並嘗試合併。 本篇提到的命令:
命令 說明
git remote add origin 倉庫地址 將遠端庫與本地當前庫關聯
git push -u origin master 將本地倉庫推送至遠端倉庫
git clone 遠端庫地址 將遠端倉庫克隆至本地
git branch 分支名 建立分支
git branch 檢視分支列表
git checkout 分支名 切換分支
git checkout -d 分支名 刪除分支
git checkout -b 分支名 建立並切換至分支
git merge 分支名 將分支合併至當前分支
git log --graph 檢視分支合併圖
git stash 暫存工作區
git stash apply 恢復工作區
git stach drop 刪除工作區狀態暫存檔案
git stach list 檢視工作區狀態暫存檔案列表
git stach pop 恢復工作區狀態並刪除暫存檔案
git remote 檢視遠端庫資訊 (-v 檢視詳細資訊)
git push origin 分支名 將本地分支提交至遠端庫
git checkout -b 分支名 origin/分支名 建立遠端庫分支的本地分支
git branch --set-upstream 分支名 origin/分支名 將本地分支與遠端庫分支建立連結
git pull 將遠端分支抓至本地並試圖合併