Git的平常使用

Git學習總結html

       最近由於在使用Git的過程當中老是會遇到須要合併分支或者解決衝突的狀況,並且使用可視化工具的時候老是會有些不直觀。因此花了一些時間研究了一下Git的使用。git

       詳細的問題請上Git的官網看文檔吧https://git-scm.com/book/zh/v2,真心寫的很棒。我這裏只是記錄一下我的對Git的感覺以及本身一些經常使用命令github

       首先須要瞭解的是Git中的三個工做區域(Git倉庫、工做目錄、暫存區域)。工具

     a) Git倉庫。咱們須要區分的是遠程倉庫和本地倉庫。他們通常都是不一樣的。咱們經常使用了git pull、git push、git fetch其實都是在遠程倉庫和本地倉庫之間進行同步。學習

      git pull至關於git fetch和git merge的和。測試

     b) 工做目錄。這裏其實就是指你進行了修改可是尚未git add的文件。fetch

     c) 暫存區域。他的意思實際上是當你下一次提交(git commit)的時候會提交暫存區域內的修改到本地倉庫。經過git add將修改添加到暫存區域中來。spa

 

  如今再來針對單個文件,文件有三種狀態。已修改(modified)、已暫存(staged)、提交(commited)。分別對應上述的操做。還有已跟蹤和未跟蹤,這個關係不大。htm

 

       接下來進入正題。Git之因此很快流行起來的緣由,很大程度上是由於它可以很方便的合併分支。若是對Git中的分支開發工做流不清楚的,強烈建議去看一下https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%B5%81。這裏假設你已經建立了與遠程倉庫分支對應的跟蹤分支。開發

                           

          合併分支:例如我要將A分支合併到B分支看成

              1. 切換到B分支下。git checkout B

              2. 更新當前分支。git fetch。有時候會須要加上<name> <branch>

              3. 若是有衝突的話合併衝突(這個以後在講)。git merge

              4. 合併分支。git merge A。

              5. 若是有衝突的話再解決衝突。

 

  衝突其實能夠稍微的分爲兩種。一種是Git能夠自動幫咱們搞定的衝突,好比說雖然是在同一個文件,可是不是在同一個位置的修改。還有一種是須要咱們本身判斷解決的衝突。

                         第一種:

                                   咱們在git merge的以後,會碰到出現給文件命名的狀況。以前 一直不理解,其實這裏是說這個解決的衝突重新commit的說明。

                         第二種:

      •    1.   git status 查看未合併的衝突文件
    •       2.  進入文件,你會看到
        •     <<<<<<< HEAD:index.html
        •     <div id="footer">contact : email.support@github.com</div>
        •     =======
        •     <div id="footer">
        •      please contact us at support@github.com
        •     </div>
        •     >>>>>>> iss53:index.html
        • 你能夠從新編輯這一段成爲你想要的樣子。HEAD指的是你當前的分支。
      •     3. 使用git add將衝突標記未已解決。
      •     4. git commit。提交到本地倉庫。

          Note:git add的時候並不會去判斷你到底有沒有去解決,也就是說哪怕你什麼都沒幹,直接git add 也是能夠的,若是你不想被同事打的話。

 

2018/07/03:

   補上團隊協做的部分。

   其實內容在git的官方文檔裏面都有。

   通常來講咱們協做的話能夠簡單的分爲兩種模式。

     一是:做爲開發者對dev分支都有寫權限,當你完成工做以後直接解決衝突推送到遠程倉庫。這種方式感受比較適合參與人數比較少的項目,或者說沒有那麼多代碼管理的項目,每一個人對本身的代碼負責。

     二是:dev分支是被保護的,除了管理員以外其餘人只有讀的權限(通常開源項目也是這個樣子)。這個時候若是你要參與開發,貢獻本身的代碼,你須要先fork項目到本身的倉庫。這個時候你能夠將你的代碼推送到本身的遠端倉庫,而後發出一個pull request請求管理員來拉你的分支。若是能夠自動合併的話是能夠在網頁上合併。

   不過通常的流程是管理員pull到本地,測試、審視以後再遞交到遠端倉庫。這種方式可能比較適合對產品有較高要求,團隊比較完善的公司。

相關文章
相關標籤/搜索