[教學] git應用-比較不同分支 - 討論區

[教學] git應用-比較不同分支

文章瀏覽次數 118 文章回覆數 2

特種兵

特種兵圖像(預設)

2022-02-26 12:25:56

From:211.23.21.202

之前介紹的比較分支,都是拿目前的本地分支跟遠端的同名分支在做比較而以。

像這樣:

$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

明明昨天在公司加班,遠端就有新的提交,為什麼回來家裡就沒有?

因為沒有更新遠端的分支資訊:

$ git remote update
$ git status
On branch master
Your branch is behind 'origin/master' by 6 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

看起來有6個新的提交在遠端,這時候我們知道使用 git pull origin/master 就可以拉回來本地端完成更新。

但實務上的開發沒那麼單純,通常會同時擁有多個分支在切換,例如:

  • debug: 修正問題的分支
  • logo: 我在開發或修改小功能的分支
  • dev: 測試環境的分支
  • message_sys: 某個新系統(訊息通知系統)或大功能還在開發中,因為會寫很久,而且影響很大,所以會另外切出來的分支
  • may: 其他協同開發同事的分支(好啦,其實沒這個人)
  • master: 正式環境的主分支

經過了一個月的努力,在這個期間,我們會到處切分支開發功能或測試等等。

準備上正式環境,問題就來了。

這時候不確定到底有哪些分支裡有已經開發好的功能需要上到正式環境。

所以我們會想知道兩個分支之間的提交差異。

例如我想看一下 logo 分支有沒有什麼提交是 master 正式環境裡沒有的:

$ git log -4 master..logo
commit 1f43f66ebf1d8a7d2cd79808e00b1200e44622b3 (origin/logo, logo)
Author: Logo-Kuo <logo@forblind.org.tw>
Date:   Fri Jan 14 17:26:00 2022 +0800

    111

commit 9517b38c06c3b17d683154233fa8addde3642800
Author: Logo-Kuo <logo@forblind.org.tw>
Date:   Fri Jan 14 15:18:30 2022 +0800

    處理衝突:是否為勸募字串與bool的衝突,改成字串

commit d43c2f199086df8bc8ab158f7466aa5ff4b83a24
Author: Logo Kuo <logo@forblind.org.tw>
Date:   Sat Jan 8 15:13:30 2022 +0800

    type: feature
    system: donor
    scope: view
    subject: 在收據資料新增勸募字號欄位

    1. 調整單筆新增成功頁的版面,讓項目集中一點

commit 60c6c95b4231b40bce7563bd4d06e32cd569a147
Author: Logo Kuo <logo@forblind.org.tw>
Date:   Sat Jan 8 15:00:32 2022 +0800

    type: feature
    system: donor
    scope: model
    subject: 在收據資料新增勸募字號欄位

    1. 在傳回收據列印資料條整勸募字號的回傳方式(不再臨時產生,而是從資料庫撈取)
    2. 關聯收據表改成 left 因為電商會沒有收據,之前沒有改到
    補充:需要配合測試

因為很多,所以先列出最新的4個就好,在 .. 的前面是主要的,後面是被比較的分支名稱。

特別注意一下每一個 commit 開頭那行最後的分支狀態,沒有寫的表示跟上一個一樣。

origin/logo, logo 這表示 logo 分支在本地跟遠端是一制的,所以被擺在一起了。

由上面的資料就可以從 commit 的內容去判斷,這個提交需不需要被合併到 master 去。

所以 commit 的內容很重要,不要亂寫,除非是臨時的 commit 會被合併掉的。我們需要從 commit 知道做了什麼事情。

那反過來看,我想知道 logo 這個分支跟遠端的 master 主分支有多少落差:

$ git log -7 logo..origin/master
commit fa1bf7bc2fff0b59e6356d466daef1b6ea205141 (origin/master, origin/head)
# origin/master 表示以下列出的是遠端 master 且本地 logo 沒有的提交
# origin/head 表示目前遠端 master 分支是停在這個提交上的
Author: Logo-Kuo <logo@forblind.org.tw>
Date:   Fri Feb 25 22:52:44 2022 +0800

    3.15.13

commit 516bd23af3022085329122478227fb28f441bf79
Author: Logo-Kuo <logo@forblind.org.tw>
Date:   Fri Feb 25 22:47:31 2022 +0800

    type: fix
    system: document
    scope: view/controller/model/js
    subject: 加入受文者如行文單位的設計

    修改:
    1. 在草稿也加入該核取方塊
    2. 在範本也加入該核取方塊

commit d482b490e4e05ca0d81d2ffe76b45f086934d8d3
Author: Logo-Kuo <logo@forblind.org.tw>
Date:   Wed Feb 23 15:06:08 2022 +0800

    type: fix
    system: document
    scope: view/controller/model
    subject: 加入受文者如行文單位的設計

    狀況:行政希望發公文時有如行文單位的設計
    問題:選擇如行文單位的受文者,只會共同產生一份公文
    修改:
    1. 新增與編輯公文加入如行文單位的核取方塊
    2. 顯示公文時區分如行文單位與一般公文的受文者顯示方式
    補充:範本與草稿還沒處理

commit 07521faecebea438e965ff9430bee8517445936c
Author: Logo-Kuo <logo@forblind.org.tw>
Date:   Tue Feb 22 14:35:05 2022 +0800

    3.15.12

commit ae02b1e33e925272586aa6c481a0513161992cd3
Author: Logo-Kuo <logo@forblind.org.tw>
Date:   Tue Feb 22 14:32:03 2022 +0800

    type: feature
    system: all
    scope: view
    subject: 在前後臺頁尾放置 ssl 標章

    新增:在前後臺頁尾放置 ssl 標章

commit 47c128e6eadc8dee49a7499ed406a4d1d07f2ceb
Author: Logo-Kuo <logo@forblind.org.tw>
Date:   Tue Feb 22 12:56:46 2022 +0800

    type: feature
    system: donor
    scope: all
    subject: 新增完成年度網路申報通知功能

    狀況:有些單位在完成捐贈者的網路上傳申報作業後會寄電郵通知捐贈者,我認為協會也可以這樣做。
    新增:完成年度網路申報通知功能
    補充:
    1. 查詢功能還沒寫
    2. 至於要不要使用,就看會計與資源部的想法

commit ed744940602d6be7779f591fcba6b9b7a2e9bec6 (master)
# master 表示以下是本地 master 的提交,而且是 logo 分支沒有的
Author: Logo-Kuo <logo@forblind.org.tw>
Date:   Wed Feb 16 15:05:54 2022 +0800

    type: fix
    system: donor
    scope: view/controller/model
    subject: 將合併捐贈人改成使用姓名來查詢

    狀況:自己覺得當初設計使用捐贈人編號查詢很不方便
    修改:從原本的捐贈人編號改成姓名

因此我們剛剛看到遠端的 master 還有6個提交是本地 master 還沒拉回來的。從上面的結果也可以再次證實這點無誤。

然後正式環境的 commit 內容,我就不會亂寫了。

可以考慮自己定一下 commit 的格式或規範,網路上資料很多。

我們不管處在哪個分支,在下參數時兩邊都寫清楚,這樣就不會搞混。

有這些資訊,我們就可以更輕鬆的處理好各個分支。至於該怎麼處理,就請依實際情況參考之前的那些文章了。

最後,補充一個比較不同分支的檔案差異指令,剛剛介紹的是以提交差異來看,但底下這個是以修改檔案的差異。

這邊我們比較本地 master 與遠端 master 的差異檔案:

$ git diff master origin/master --stat
sys/controllers/documentController.php             |  19 ++                    
sys/controllers/donorsAdminController.php          | 214 ++++++++++++++++++++- 

去掉 --stat 就可以看詳細,請參考之前介紹過的 diff。

留言

#1

午夜幽灵

午夜幽灵圖像(預設)

2022-05-23 19:26:20

From:161.129.34.12

你好我想问你一下,你写的git文章一到十四片我都看完了,其他的在哪里可以搜索查看到呢。

#2

特種兵

特種兵圖像(預設)

2022-05-24 08:26:52

From:114.32.232.155

在討論區搜尋 git 就可以看到所有的文章