1. 程式人生 > >分支管理~建立、合併分支 git branch , git merge(九)

分支管理~建立、合併分支 git branch , git merge(九)

簡介:

分支在實際中有什麼用呢?假設你準備開發一個新功能,但是需要兩週才能完成,第一週你寫了50%的程式碼, 如果立刻提交,由於程式碼還沒寫完,不完整的程式碼庫會導致別人不能幹活了。如果等程式碼全部寫完再一次提交,又存在丟失每天進度的巨大風險。
            現在有了分支,就不用怕了。你建立了一個屬於你自己的分支,別人看不到,還繼續在原來的分支上正常工作,而你在自己的分支上幹活,想提交就提交,直到開發完畢後,再一次性合併到原來的分支上,這樣,既安全,又不影響別人工作。 

其他版本控制系統如SVN等都有分支管理,但是用過之後你會發現,這些版本控制系統建立和切換分支比蝸牛還慢,簡直讓人無法忍受,結果分支功能成了擺設,大家都不去用。 

但Git的分支是與眾不同的,無論建立、切換和刪除分支,Git在1秒鐘之內就能完成!無論你的版本庫是1個檔案還是1萬個檔案。


建立、合併、切換、刪除分支:

在第五篇返回上一個修改版本里,可知,git log 命令,每次提交,Git 都把它們串成一條時間線,這條時間線就是一個分支。在Git裡,這個分支叫主分支,即master分支。HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前主線分支。流程: HEAD -->  主線分支 master  -->   最新的提交 commit ;

下面我們開始實踐:

1、 首先,我們建立dev分支,然後切換到dev分支,如下:

由上可知:命令 git checkout 命令加上 -b 引數表示建立並切換,相當於以下兩條命令:

 表示建立分支dev;

表示切換到分支dev;

2、接下來,我們可以用命令 git branch 檢視分支有哪些 ?  如下:

命令 git branch 表示列出所有分支,當前分支前面會標一個號;圖上dev為當前分支;

3、現在,我們可以在分支dev上正常提交了,比如 建立一個檔案 readme.txt 並且新增一行內容(Hello Git),如下:

然後 新增、提交,如下:

現在,分支dev的提交工作完成,我們就可以切換回主線master分支,如下:

切換回主線分支master 後, gitSkills 資料夾目錄裡只有一個 檔案,剛才建立的新檔案 readme.txt 檔案不見了,因為那個提交操作是在 dev 分支上實現,此時,我們再切回分支 dev 檢視一下,如下:

由上圖可知,分支dev 上 是存在兩份檔案的,而 主線分支 master 此刻的提交點並沒有改變,如下:

現在,我們可以把 dev 分支 的工作成果合併到 master 分支上,如下:(前提是分支必須在 主線 master 上合併 dev)

git merge命令用於合併指定分支到當前分支。合併後,再檢視 gitSkills 資料夾的內容,就可以看到,和dev分支的最新提交是完全一樣的。注意到上面的Fast-forward資訊,Git告訴我們,這次合併是“快進模式”,也就是直接把master指向dev的最新提交,所以合併速度非常快。當然,也不是每次合併都能Fast-forward,我們後面會講其他方式的合併。

4、合併完成後,可以放心地刪除 dev 分支了,如下:

刪除後,檢視branch,就只剩下 master 分支了,如下:

因為建立、合併和刪除分支非常快,所以Git鼓勵你使用分支完成某個任務,合併後再刪掉分支,這和直接在master分支上工作效果是一樣的,但過程更安全。

小結:

  1. 檢視分支:git branch
  2. 建立分支:git branch <name>
  3. 切換分支:git checkout <name>
  4. 合併分支:要在主線分支master 下合併, git merge <name>
  5. 刪除分支:git branch -d <name>
  6. 建立並切換分支: git checkout -b <name>

轉自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000