iT邦幫忙

2026 iThome 鐵人賽

DAY 28
1
佛心分享-IT 人自學之術

學過一點 React,卻被撈進 C#:新手用 AI 硬啃 MVC 企業專案的 3 個月實錄系列 第 28

Day 28|工作單怎麼變成我的 Branch?從 Azure DevOps 建分支到 Visual Studio Checkout

  • 分享至 

  • xImage
  •  

上一篇終於先把 Azure DevOps 裡的:

Boards
Work Items
Sprints
Feature
Product Backlog Item
Task

整理清楚了。

也就是說,我現在已經知道:

這次到底要做哪一張 Task

但找到工作單之後,還不能直接:

打開 main
↓
開始改程式

公司裡通常會先為這次工作建立:

自己的 Branch

也就是:

這次需求專屬的開發分支

然後我才會在 Visual Studio 裡切到那支 Branch 開始工作。

整個流程大概會變成:

Task
↓
建立 Branch
↓
Branch 綁定 Work Item
↓
Visual Studio Fetch
↓
找到遠端 Branch
↓
Checkout
↓
確認目前 Branch
↓
開始開發

第一次做這套流程的時候,我最容易卡在:

Azure DevOps 明明已經建立 Branch 了

為什麼 Visual Studio 找不到?

以及:

Clone
Fetch
Pull
Checkout

到底又差在哪?

這篇就把這段完整走一次。


為什麼找到 Task 之後還要建立 Branch?

假設目前團隊主要版本是:

main

如果每個工程師都直接在 main 上修改:

A 工程師
改登入

B 工程師
改會員

C 工程師
改報表

全部混在一起,風險會很高。

所以常見做法是:

main
↓
建立自己的工作 Branch

例如:

main
│
├─ feature/login
│
├─ feature/member
│
└─ feature/report

大家先在自己的 Branch 工作。

完成後才透過後面的:

Pull Request
Review
Merge

把修改整合回 main。

所以 Branch 可以先理解成:

從目前某個版本切出一條自己的開發線,讓我可以先完成這次工作,而不是直接修改主要分支。


Branch 最好跟工作單有關聯

上一篇已經有:

Feature
↓
PBI
↓
Task

到了真正開發時,我們最關心的是:

這支 Branch 是為了哪一張 Task?

所以公司流程會把:

Task

和:

Branch

綁在一起。

這樣之後就可以從:

Task

看到:

對應的 Branch

也可以從 Branch 追到:

這支分支到底是為了哪張工作單建立的?

整條關係就會變成:

需求
↓
Task
↓
Branch
↓
Commit
↓
Pull Request

方法一:直接從 Task 建立 Branch

在我們目前的流程裡,可以直接從黃色 Task 建立 Branch。

進入自己的 Task 後,在工作項目的選單中選擇:

New Branch

建立新的 Branch。

這種方式的好處是:

Branch
可以直接和這張 Task 建立關聯

不用之後再回頭找 Work Item。

https://ithelp.ithome.com.tw/upload/images/20260828/20181499JZWHwSy9FV.png

建立時通常會需要確認:

Branch Name
Repository
Base Branch
Work Item

其中最重要的是:

Branch 到底從哪一支分出去?

例如:

main
↓
建立新的工作 Branch

那新 Branch 的起點就是:

main 當下的版本

Branch 名稱不是想叫什麼就叫什麼

自己練習 Git 時,可能會取:

test
new
abbie

甚至:

final

但企業專案通常會有 Branch 命名規則。

我們目前使用的格式例如:

組別-員編-年月日-時間

例如:

AP04-E1087-20240126-1200

這不是 Git 規定的格式。

是:

公司的 Branch 命名規範

不同公司可能會使用:

feature/功能名稱
bugfix/問題名稱
員編-日期
工單號-功能名稱

等等。

所以重點不是背:

Branch 一定要叫 AP04-...

而是:

進公司後要遵守團隊的 Branch Naming Convention

Work items to link 是什麼?

建立 Branch 時,還可能看到:

Work items to link

意思就是:

這支 Branch 要跟哪一張 Work Item 建立關聯?

在我們目前的流程裡,通常會綁:

Task

也就是之前說的黃色工作單。

例如:

Task #12345
新增詳細資料頁部門欄位

建立 Branch:

AP04-E1087-20240126-1200

兩邊建立關聯後,就可以知道:

這支 Branch
就是為了 Task #12345

方法二:也可以從 Repos 建立 Branch

除了從 Task 建立之外,也可以到:

Repos
↓
Branches

建立新的 Branch。

https://ithelp.ithome.com.tw/upload/images/20260828/20181499fdfc6xsPJu.png

這種方式一樣可以建立分支。

差別是:

如果不是從 Task 建立
就要自己確認 Work Item 有沒有正確綁上去

所以流程可能變成:

Repos
↓
Branches
↓
New Branch
↓
輸入 Branch Name
↓
選擇 Base Branch
↓
選擇 Work Item

兩種方式都能建立 Branch。

只是公司實際希望用哪一種,要跟團隊流程走。


建完 Branch 之後,可以回工作單確認

建立完成後,回到 Task。

可以查看:

Development
Links
Branch

之類的關聯資訊。

如果正確綁定,就能看到:

這張 Task
↓
對應哪一支 Branch

這一步很值得確認。

不然到了後面 PR 才發現:

Branch 根本沒綁到正確的 Task

又要回頭整理。


Azure DevOps 有 Branch 了,為什麼 Visual Studio 看不到?

這是我第一次做最容易疑惑的地方。

我明明在 Azure DevOps:

Branches

已經看到:

AP04-E1087-20240126-1200

結果打開 Visual Studio:

找不到。

蛤?

原因是:

Azure DevOps
是在 Remote

而:

Visual Studio
目前看到的是我的 Local Repository 狀態

遠端剛建立一支新的 Branch,不代表我的本機會即時自動知道。

這時候就需要:

Fetch

Fetch 是什麼?

Fetch 中文可能會看到:

擷取

它可以先理解成:

去 Remote Repository 看看現在有哪些新的 Branch 和 Commit,更新我本機所知道的遠端資訊。

方向大概是:

Azure DevOps
Remote Repository

↓

Fetch

↓

我的電腦
更新遠端資訊

注意:

Fetch

不是直接把遠端程式整個合進我現在的 Branch。

它比較像:

先更新情報

例如 Azure DevOps 剛新增:

AP04-E1087-20240126-1200

我的 Visual Studio 原本不知道。

執行:

Git
↓
Fetch

之後:

Visual Studio
現在知道遠端有這支 Branch 了

Fetch 跟 Pull 不一樣

這兩個超容易混。

我現在會這樣記:

Fetch
↓
更新「遠端有哪些東西」的資訊
Pull
↓
把遠端的新版本抓回來
並整合到我目前的本機 Branch

所以:

我只是想找剛建立的遠端 Branch

這時通常先:

Fetch

就有機會找到。

不是看到遠端有更新就:

一直 Pull

第一次取得專案又不一樣:Clone

如果我的電腦:

完全還沒有這個 Repository

那就不是 Fetch 或 Pull。

而是:

Clone Repository
複製存放庫

Clone 可以先理解成:

第一次把整個遠端 Repository 和版本歷史建立到自己的電腦。

例如:

Azure DevOps
Remote Repository

↓

Clone

↓

我的電腦
Local Repository

所以可以簡單分:

第一次完全沒有專案
↓
Clone
本機已經有 Repository
只是要知道遠端最新 Branch / Commit
↓
Fetch
本機已經有 Repository
想把目前 Branch 更新成遠端最新版本
↓
Pull

Clone、Fetch、Pull 先一起比較

操作 什麼時候用 白話理解
Clone 第一次取得 Repository 整個專案第一次抓到本機
Fetch 想更新遠端資訊 看遠端最近多了什麼
Pull 想更新目前本機 Branch 把遠端內容抓下來並整合

這三個用途真的不一樣。


Repository 也不能選錯

公司 Azure DevOps 裡可能不只有一個 Repository。

例如依不同專案分類可能有:

DBSchema
eHealth
HIS
HIS-TEST

不同 Repository 管理不同程式內容。

所以開始工作前不能只確認:

Branch 名稱對不對

還要確認:

Repository 對不對

不然可能發生:

Branch 明明建立了
Visual Studio 怎麼永遠找不到?

結果是:

Azure DevOps Branch 建在 Repository A

Visual Studio 卻正在看 Repository B

當然找不到。

所以我現在遇到:

Branch 不見了

第一個不會再只想:

Visual Studio 壞掉了。

而是先檢查:

Repository

Visual Studio 要怎麼取得遠端 Branch?

假設現在 Azure DevOps 已經建立:

AP04-E1087-20240126-1200

而且是在正確 Repository。

接著進 Visual Studio。

先執行:

Git
↓
Fetch

讓本機更新 Remote Branch 資訊。

接著打開:

View
↓
Git Changes

或 Visual Studio 提供的 Branch 管理介面。

在 Branch 選單中搜尋:

自己的員編

或完整 Branch 名稱。

例如:

E1087

找到:

origin/AP04-E1087-20240126-1200

這類遠端 Branch。

接著就要:

Checkout

Checkout 是什麼?

Checkout 中文可能會看到:

簽出

第一次看這個翻譯真的很難理解。

我現在會直接把 Checkout 記成:

切換到我要工作的 Branch。

例如我原本在:

main

Checkout:

AP04-E1087-20240126-1200

之後:

Visual Studio
目前工作分支

就變成這一支。

也就是:

main
↓
Checkout
↓
AP04-E1087-20240126-1200

從現在開始修改的程式,就是在:

這支 Branch

上進行。


Remote Branch 和 Local Branch 又來了

Azure DevOps 剛建立的是:

Remote Branch

因為它在:

Remote Repository

Fetch 後,我的 Visual Studio 知道:

遠端有這支 Branch

再 Checkout 後,Visual Studio 會在本機建立對應的工作 Branch。

可以先理解成:

Azure DevOps

Remote Branch
AP04-E1087-20240126-1200

↓

Fetch
知道它存在

↓

Checkout

↓

Visual Studio

Local Branch
AP04-E1087-20240126-1200

這支 Local Branch 通常也會追蹤對應的 Remote Branch。

後面:

Push
Pull

才知道要跟哪一支遠端 Branch 同步。


origin/BranchName 是什麼?

在 Visual Studio 裡可能看到:

origin/main

或者:

origin/AP04-E1087-20240126-1200

這裡的:

origin

通常是 Remote 的名稱。

可以先簡單理解成:

origin/main
↓
遠端 main

而:

main

則是:

我的 Local main

所以:

origin/AP04-E1087-...

可以先理解成:

Azure DevOps 上那支遠端 Branch 的資訊

Checkout 之後,我才會有自己本機真正工作的:

AP04-E1087-...

Branch 找不到時,我現在怎麼查?

這個我覺得很實用。

如果 Azure DevOps 明明有 Branch,但 Visual Studio 找不到,我會依序確認:

第一個
Azure DevOps 上真的有建立成功嗎?

第二個
Branch 建在哪個 Repository?

第三個
Visual Studio 現在連的是同一個 Repository 嗎?

第四個
有沒有執行 Fetch?

第五個
搜尋的 Branch 名稱有沒有打錯?

可以直接記成:

1. Branch 存不存在
2. Repository 對不對
3. Visual Studio 連線對不對
4. Fetch 了沒有
5. Branch Name 對不對

通常就比:

一直重開 Visual Studio

有效很多。


開始寫程式前,先看目前到底在哪個 Branch

Checkout 完成後,我現在不會馬上開始改。

會先確認:

目前所在 Branch

在 Visual Studio 的:

Git Changes

上方,通常可以看到目前 Branch。

例如:

AP04-E1087-20240126-1200

我要確認:

這就是目前這張 Task 對應的 Branch

才開始修改。

因為最怕的是:

以為自己在工作 Branch

結果其實還在 main

然後改了半天。

這種真的會很麻煩。

所以現在我會把:

確認 Branch

當成開始開發前固定的一個動作。


為什麼不能直接一直用舊 Branch?

一個 Branch 通常是為了:

一個工作目的

建立的。

例如:

Task #1234
↓
Branch A

這個工作完成、PR 合併後,這支 Branch 的任務基本上就完成了。

下一張新的 Task:

Task #5678

通常應該重新建立:

Branch B

而不是:

Branch A 做完
↓
繼續拿來做 Task #5678

否則:

Work Item
Branch
Commit
PR

之間的關係就會開始混亂。

所以:

一張新的工作
↓
新的 Branch

通常會比較乾淨。

實際還是依公司的 Branch Policy。


如果 Branch 已經被 Merge,還要不要繼續用?

我們目前的流程是:

PR 完成
↓
Branch 合併
↓
這支工作 Branch 不再繼續使用

下一個工作重新建立新的 Branch。

這也是為什麼 Branch 名稱裡會放:

員編
日期
時間

因為每次工作都可能建立新的分支。

這是公司的工作規範,不是 Git 強迫所有團隊都這樣使用。


開發開始前,main 要不要先更新?

如果 Branch 是從:

main

建立。

那建立 Branch 之前,最好先確認:

這個 main 是不是團隊目前預期的最新版本?

因為如果:

遠端 main
已經到 Commit D

但是本機還停:

Commit B

然後從 B 開一支 Branch。

我的工作一開始就會少:

Commit C
Commit D

不過我們現在主要是:

先從 Azure DevOps 建 Remote Branch

所以要確認建立 Branch 時使用的:

Base Branch

就是團隊目前要求的目標 Branch。

實際更新 main、Merge main 的時間點,後面 PR 前還會再遇到。


Task 到 Branch 現在可以串起來了

上一篇停在:

找到 Task

今天就變成:

Task
↓
New Branch
↓
設定 Branch Name
↓
確認 Base Branch
↓
Link Work Item
↓
建立 Remote Branch
↓
Visual Studio
↓
Fetch
↓
找到 Remote Branch
↓
Checkout
↓
建立 / 切換 Local Branch
↓
確認目前 Branch
↓
開始開發

這樣工作單就真的開始跟程式碼連起來了。


我現在開始一張工作單,大概會怎麼做?

如果今天拿到:

Task #12345
新增詳細資料頁部門欄位

我現在會先:

第一步
確認 Task

第二步
從 Task 建立 Branch

第三步
依公司規則命名 Branch

第四步
確認 Work Item Link

第五步
確認 Repository

第六步
到 Visual Studio

第七步
Fetch

第八步
搜尋自己的 Remote Branch

第九步
Checkout

第十步
確認 Git Changes 上方目前 Branch

第十一步
開始修改程式

到了這一步,才真的正式進入:

開發

Clone、Fetch、Pull、Checkout 最後再分一次

這幾個真的很容易混,所以我最後再整理一次。

Clone
↓
我的電腦原本完全沒有 Repository
第一次把專案抓下來
Fetch
↓
本機已經有 Repository
更新遠端 Branch / Commit 的資訊
Pull
↓
把遠端目前 Branch 的更新抓回本機並整合
Checkout
↓
切換到我要工作的 Branch

如果只想記白話版:

Clone
第一次拿專案

Fetch
更新遠端情報

Pull
把更新拉進來

Checkout
換到我要工作的分支

這篇先記住什麼?

找到工作單之後:

不是直接改 main。

而是先把工作跟 Branch 建立關係。

在我們目前的工作流程裡,大概是:

Task
↓
建立 Branch
↓
Branch 綁 Task
↓
Visual Studio Fetch
↓
取得 Remote Branch 資訊
↓
Checkout
↓
切到自己的 Local Branch
↓
確認 Branch
↓
開始開發

其中最容易搞混的是:

Azure DevOps 已經有 Branch
≠
Visual Studio 立刻知道

所以才需要:

Fetch

另外也要分清楚:

Clone
第一次取得 Repository

Fetch
更新 Remote 資訊

Pull
同步目前 Branch 的內容

Checkout
切換 Branch

而我現在開始改程式以前,會先固定確認兩件事:

Repository 對不對?

Branch 對不對?

這兩個對了,才真的開始寫。

接下來就進入最後一個實際問題:

好。

Branch 也對了。
功能也寫完了。
Build 也過了。

那我要怎麼把這次修改交出去?

Git Changes 要看什麼?

Commit 和 Push 差在哪?

什麼時候要 Fetch / Pull?

最後 Pull Request 又要怎麼開?

下一篇:

程式改完怎麼送出去?Git Changes、Commit、Push 到 Pull Request 一次走完。


上一篇
Day 27|第一次進 Azure DevOps:Boards、Work Items、Sprint 和工作項目到底怎麼看?
下一篇
Day 29|程式改完怎麼送出去?Git Changes、Commit、Push 到 Pull Request 一次走完
系列文
學過一點 React,卻被撈進 C#:新手用 AI 硬啃 MVC 企業專案的 3 個月實錄29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言