影片連結:https://youtu.be/buecKro3Tq8
教學文件:https://quip.com/g9gIAQXVBmF2


1-分支與 commit 的簡介

除了 commit 記錄外,還可以看到實他的內容。
在 GitHub 的 Insights > network 裡的圖示,以 Bootstrp 來說一個 commit 就是一個點,以黑線來說就可能是正式版的資料。
20191024_線上問答會_Git & Github 入門-3-分支-0001
20191024_線上問答會_Git & Github 入門-3-分支-0002
20191024_線上問答會_Git & Github 入門-3-分支-0003

為了不讓正式版的線壞掉,此時會使用新的線來放 commit 記錄,確任 commit 記錄沒問題後,在將其他色的 commit 記錄合併到主線黑色上,其他的線不在主線又是另外的色上就是分支。
20191024_線上問答會_Git & Github 入門-3-分支-0004
20191024_線上問答會_Git & Github 入門-3-分支-0005

以 MOPCON 開發為例,上面有 origin 就是指在主機上的程式碼 (水藍色), deploy 就是開發中的分支 (粉紅色),像是開發時就會用一條分支的線,或是新增資訊時會在另外開新分支 commit ,確任好分支沒問題時才會合併到正式主機的分支上。
20191024_線上問答會_Git & Github 入門-3-分支-0006


2-什麼是分支

2-1-本地分支與遠端分支 GitHub

目前的話有一個 Git 追蹤檔,另外一個 all.css 還沒加入索引。
20191024_線上問答會_Git & Github 入門-3-分支-0007

接著到 GitHub 上開啟一個遠端數劇數,命名為 1029,如果要將本地端先前所輸入的版控記錄,準備推送到 GitHub 上的話,要使用第二個部份 (…or push an existing repository from the command line),並將二段指令都輸入到終端機中。。
20191024_線上問答會_Git & Github 入門-3-分支-0008

在 SourceTree 裡開始資料夾,可以看有二個分支,裡面有二個 commit 記錄,本地分支有一支,遠端分支也有一支。
20191024_線上問答會_Git & Github 入門-3-分支-0009

之前的課都會說是更新到遠端,而針對此課程要改成合併到遠端分支,實際上是合併程式碼與 commit。

目前的話是 Git 是這樣的狀態。
20191024_線上問答會_Git & Github 入門-3-分支-0010

2-2-GitHub Pages 靜態頁面

GitHub 有開啟靜態頁面的功能,可以點進設定項目中的 Settings(設定功能),選要發佈的靜態網頁分支,這裡在 GitHub Pages 的 Source 的分支選項謝 mater branch 的項目。
20191029_線上問答會_Git & Github 入門-3-分支-0001

設定完成後會在卡片抬頭的部份,多一個 GitHub Pages 的頁面連結網址,點按下去後開啟頁面首頁。
20191029_線上問答會_Git & Github 入門-3-分支-0002

開啟連結的話會是空白頁面,原因是因為只有 HTML 的架構而沒有任何的內容在網頁上。
20191029_線上問答會_Git & Github 入門-3-分支-0003

目前的話分支 GitHub 的遠端分支是在的位置。
20191029_線上問答會_Git & Github 入門-3-分支-0004

專案資料夾中在 index.html 加入 <h1>1244</h1> 內容,另外 all.css 的部份在加入 h1{color: bule;},內容加入後在切到終端機輸入下面指令。

注意遠端分支名是 origin 不是 GitHub,分支名輸入錯話會回應錯誤提示,遠端分支可自定名稱。
20191029_線上問答會_Git & Github 入門-3-分支-0013

目前本地與遠端的分支情形,推送上去後到切到 GitHub Pages 的頁面更新頁面,此時所推上去的樣式就會更新在頁面上。
本地端與遠端分支,透過比對後如果沒問題,才會推送到新的 commit 記錄合併到遠端分支。
20191029_線上問答會_Git & Github 入門-3-分支-0005

2-3-為何使用分支-正式與測試主機使用的開發的分支

線上正式主機更新沒有處理檢查而直接推到正式主機上,使得程式產生問題,此時就是開發者的問題。
在開發時都會有個專屬測試的分支,對應測試專用的主機,在檢查沒問題之後才會推到正式主機。
在新分支可以針對開發專用,在開發沒問題後才推到遠端正式主機的使用分支,進行合併分支的動作。

2-4-開啟新分支

接著要開啟一個新的分支,命名為 devlope 或是簡寫為 dev,輸入指令 git branch devlop
輸入指令完後感覺沒有任何變化,但使用 SourceTree 時可以看到多了個 devlop 的分支。
20191029_線上問答會_Git & Github 入門-3-分支-0007

目前三個本地端的分支,都指向同一個 commit 記錄點上。
20191029_線上問答會_Git & Github 入門-3-分支-0008

2-5-查看目前有多少分支

輸入指令 git branch ,在終端機上就會回應出分支名稱,目前有二個分支顯示,離開分支列表按下 q 鍵。
20191029_線上問答會_Git & Github 入門-3-分支-0009

2-6-切換分支

輸入指令 git checkout devlop 切換到 devlop 分支上,在對應的分支上可以做出獨立的額外開發。
20191029_線上問答會_Git & Github 入門-3-分支-0010

輸入完指令後,可以在 SourceTree 上的 devlop 分支名變成粗黑體,另外使用 git branch 查分支時,會在 devlop 分支前多一個 *
20191029_線上問答會_Git & Github 入門-3-分支-0011
20191029_線上問答會_Git & Github 入門-3-分支-0012

2-7-切換分支與 HEAD

輸入完指令後,就可以看到 devlop 分支的記錄往前。
20191029_線上問答會_Git & Github 入門-3-分支-0014

目前因為在新開的分支 devlop 也切換過去,切過去之後的 HADE 就會跑到 devlop 分支上。
20191029_線上問答會_Git & Github 入門-3-分支-0015

新加入一個 commit 的記錄,所以 HEAD 與 devlop 就會多一個 commit 上去,
20191029_線上問答會_Git & Github 入門-3-分支-0016

目前專案資料夾內的分支 devlop 的情形。
20191029_線上問答會_Git & Github 入門-3-分支-0017

接著要切換到 master 分支,輸入指令 git checkout master 切換到 master 分支,切換後的 index2 與 index3 檔不見了。
20191029_線上問答會_Git & Github 入門-3-分支-0018

因為切換到 master 分支,所以 HEAD 也跟著到 master 分支旁。
20191029_線上問答會_Git & Github 入門-3-分支-0020

1. branch 就像便利貼,會貼在 commit 的位置上。
2. 使用 git checkout <分支名> 時,HEAD 也會依照對應位置指定 commit 位置。

2-8-合併分支

2-8-1-合併方式一 – git merge <合併對象分支名> (合併分支執行快轉)

目前的分支情形在 devlop 分支,多加入了 index2index3 的檔案後,多加一個 commit 記錄。
切換到 masterHEAD 也因為切回到 master 分支後跟著移動,此時不見 index2index3 的檔案。

git merge 合併程式碼,要將 master 上分支與 devlop 分支上的檔案與程式碼合併,將 devlopcommit 記錄中的內容也讓 master 擁有。

2-8-1-1-切換到要合併分支上,與對象分支進行合併 (由舊分支沒有的內容取得新分支上的內容)

要讓 master 分支有 devlop 上的資料,要先切到 master 分支上,因為還沒有 devlop 分支上的內容,所以要先切過去。
20191029_線上問答會_Git & Github 入門-3-分支-0021

2-8-1-2-執行合併分支指令 (git merge <對象分支>)

確任現在 master 分支上後,輸入指令 git merge devlop ,輸入送出完成 merge 的動作。
20191029_線上問答會_Git & Github 入門-3-分支-0022

輸入完成後 master, devlop, HEAD 都會在同一個 commit 記錄點上,而遠端的 commit 也還是在第三個 commit 記錄上。
20191029_線上問答會_Git & Github 入門-3-分支-0023
20191029_線上問答會_Git & Github 入門-3-分支-0025

git 快轉
像是時空快轉,當二條分支在同一個基底與同一個 commit 記錄點上,如果使用指令 git merge 後,還是會在同一條線上,但實際上還是二個分支。

2-8-2-合併方式二 – git merge <合併對象分支名> –no-ff (合併分支不執行快轉)

使用指令 git merge <合併對象分支名> 加上參數指令 --no-ff ,會使得同線同基底的 commit 在合併時,產生不執行快轉的動作,也就是開發者常說的小耳朵

輸人完後在使用 git checkout master 切回 master 分支上。
此時在 master 分支上輸入合併 devlop 分支指令 git merge --no-ff
--no-ff 是不希望有快轉情形產生,會在針對合份上多個 commit 記錄。

輸入完指令後會跳出 commit 訊息的編輯檔,會等同於 git commit -m "Merge branch 'devlop'",如果都確任合併訊息沒問題,只要將右方的關閉後就完成合併與新增 commit 記錄的動作。
20191029_線上問答會_Git & Github 入門-3-分支-0026

在 SourceTree 上的 devlopmaster 分支上也會多個 commit 點,產生出小耳朵。
20191029_線上問答會_Git & Github 入門-3-分支-0027

目前分支與合併後的情形。
20191029_線上問答會_Git & Github 入門-3-分支-0028

為何要有小耳朵的合併分支方式,如果在許多分支在同一條線上時,在許多 commit 點都在不同分支上,會比較不清楚所修過 commit 與分支的關係,也不知在何時有合併分支的動作。
在分支上如果產生新的內容後,就在同一個 commit 點上另外在產生一個點交待合併分支的說明情形。


3-透過 learngitbranching 了解分支操作

練習 Git 指令連結:https://learngitbranching.js.org/

3-1-第一題 ( git merge 所產生合併的快轉 )

20191029_線上問答會_Git & Github 入門-3-分支-0029

git merge dev 指令輸入後,會出現快轉的情形,主要是在合併時在同一條線上。

3-2-第一題補充說明-合併分支的使用情境

  • 在開發時有可能在 c1 時,就開一個分支命名為 r/master 的遠端分支,有可能因為客戶要看資料,先推上遠端的分支上。
  • 接著因為本地端要和 master 分支切開,怕在開發的過程式使的 master 產生問題,所以本地端另外在用一支分支 dev
  • 在開發上針對開發使用,所以切到分支 dev 上,使用指令 git checkout dev
  • 新做二個功能,使用二個 commit 記錄。
  • 給分支管理者 (腦板) 確任 dev 開發功能正確,確任可以直接合併 master 分支,輸入指令 git checkout mastergit merge dev

目前的 HEADdev 的分支上
20191029_線上問答會_Git & Github 入門-3-分支-0030

所以需要將 HEAD 切換 master 分支上,透過合併分支 dev 的內容,才能將裡面的內容加入到 master 分支內。
20191029_線上問答會_Git & Github 入門-3-分支-0031
20191029_線上問答會_Git & Github 入門-3-分支-0032

20191029_線上問答會_Git & Github 入門-3-分支-0033

輸入指令 git chekout master 切換到分支 master 之後。
20191029_線上問答會_Git & Github 入門-3-分支-0034

在使用 git merge dev 將分支的功能做合併取得分支 dev 的內容。
20191029_線上問答會_Git & Github 入門-3-分支-0035

合併分支主要都是舊的合併新的,少有新的合併舊的。

接著要讓遠端分支 r/master 也有 master 分支的內容,輸入指令 git checkout r/master
接著輸入 git merge master 就會讓 r/master 快轉,目前三個分支都會在同一條線上。
20191029_線上問答會_Git & Github 入門-3-分支-0036

git push 也是使用遠端數劇庫是透過本地分支合併遠端分支。

3-3-第二題 ( git reset HEAD^ 還原記錄點並重新修正分支記錄點、快轉情形下合併會不知合併時間點 )

一開始開給測試主機用的 dev 分支。
接著連二次的 commit,此時發現錯誤,因為還沒有切回到 dev 分支,所以直接在 master 做二次的 commit 記錄。
螢幕快照 2019-11-30 上午11.11.49

此時使用還原 N 版本功能,輸入指令 git reset HEAD ^ ( ^ 還原提交次數,如果二個就是 ^^), HEAD 是指目前的分支與記錄點位置,透過指令可以連同分支一定退還原點,不需要的記錄點就會不見。

git reset HEAD^^^^ 指的是還原前二個記錄點,在使用 sourctree 軟體上查看時,放棄的還原點就會不見。
20191029_線上問答會_Git & Github 入門-3-分支-0037

輸入 git checkout dev 切換到 dev 分支,接連打二個 git commit
20191029_線上問答會_Git & Github 入門-3-分支-0038

3-4-第三題 (分支使用情境)

目前依分支的處理情形,是要多開 dev 分支,在與 dev 分支合併到 master 的最新記錄點
20191029_線上問答會_Git & Github 入門-3-分支-0039

  1. 情境一:masterc2 時新增分支 dev,情境就像是 master 的正式主機上的內容已正式使用,所以不要在動到,需要由 dev 分支在加入新的內容,確任好的內容沒問題後,在由 master 分支合併到 dev 分支裡的內容過去。
  2. 情境二:是有二個開發者,另外一個開發者在開發較複雜的功能,所以就會切到分支 dev 處理,而原本在 master 發現有問題是字打錯,所以在 master 分支上,在加上一個記錄點,最後都確任沒有問題的情形下,由 master 合併 dev 的內容進來。

master 的顏色點還是一樣,主要是由 master 合併 dev 的內容進來,所以色彩上也還是會與 master 一樣。
20191029_線上問答會_Git & Github 入門-3-分支-0040

3-5-第四題 ( git merge 加參數 –no-ff 不讓合併產生快轉 )

20191029_線上問答會_Git & Github 入門-3-分支-0041

先使用指令 git reset HEAD^ 指定,將原本合併的記錄點還原到前一個記錄點。
20191029_線上問答會_Git & Github 入門-3-分支-0042

如果是在同線上的話,直接使用 git marge <分支名稱> 的話,在執行完成後就會直接移動分支的記錄點,會不知道在那一個記錄點上執行過合併的動作,也不知道何時開出的 dev 分支出來
20191029_線上問答會_Git & Github 入門-3-分支-0043

3-6-第五題 ( 在不同分支上已有各自的記錄點,不需在加上 –no-ff 參數合併分支 )

20191029_線上問答會_Git & Github 入門-3-分支-0044

目前的話是由 c2 為基底,二個分支各自有廷伸的記錄點,所以不用使用參數 --no-ff 來快轉。
20191029_線上問答會_Git & Github 入門-3-分支-0045

3-7-第六題 (遠端分支與本地 master 分支配合本地 dev 分支,不影響遠端分支在本地進行開發)

有三個分支,多一個 r/master
20191029_線上問答會_Git & Github 入門-3-分支-0046

情境說明,目前 r/master 的遠端分支停在 c2 的記錄點,不在動到上線的遠端主機,為了進行開發在本地端處理 masterdev 分支,在 dev 分支到 c5 時, masterr/master 分支沒有新的記錄點,為了不讓快轉的情形產生要在合併時加上參數 --no-ff,此時在新的線圖上就不會在同一線上,了解到 master 分支在何時與 dev 分支合併。
20191029_線上問答會_Git & Github 入門-3-分支-0047

3-8-第七題 ( 本地分支合併加 –no-ff 參數 )

20191029_線上問答會_Git & Github 入門-3-分支-0048

3-9-第八題 ( 本地 dev 分支與遠端分支配合更新,將遠端分支透過合併更新至最新記錄點 )

20191029_線上問答會_Git & Github 入門-3-分支-0049

20191029_線上問答會_Git & Github 入門-3-分支-0050

3-10-第九題 ( 本地分支進行 dev 分支更新內容,等待確任後再將遠端分支,進行合併更新至最新記錄點 )

在遠端分支只會有五個記錄點,在本地端才處理到 dev 分支併到 master 分支裡,正準備推送上遠端。
20191029_線上問答會_Git & Github 入門-3-分支-0051

3-11-第十題 ( 本地分支 master 合併二個不同的測試分支,不需使用 –no-ff 合併參數 )

20191029_線上問答會_Git & Github 入門-3-分支-0052


4-learngitbranching 分支 commit 記錄點分享方式

在輸入完一次 git commit 後,輸入語法 export tree ,此時會出現面版將裡面的程式碼 COPY 起來。
20191029_線上問答會_Git & Github 入門-3-分支-0054

如果要讀入程式碼輸入程式碼 inport tree 指令,在把取得的程式碼貼入後點按 Confirm ,就會將原本輸入的狀態顯示在畫面上。
20191029_線上問答會_Git & Github 入門-3-分支-0055
20191029_線上問答會_Git & Github 入門-3-分支-0056