iT邦幫忙

2025 iThome 鐵人賽

DAY 24
0
Software Development

軟體開發養成計畫:以小程式實作深化開發能力系列 第 24

[Day24]程式開發必備技能:Git & GitHub 的基礎應用

  • 分享至 

  • xImage
  •  

開場

在寫程式或做專案的時候,你是不是常常遇到以下的狀況呢?

  • 今天修了一版檔案,卻忘記備份,結果改壞了回不去。
  • 專案裡到處都是「final、final_v2、final真的最後版」。
  • 和別人合作時,彼此的檔案互相覆蓋,搞不清楚誰改了什麼。

這些痛點我通通都踩過...而這些而這些其實都是缺乏版本控制的結果。
為了解決這些情況,今天來分享一個程式開發中必學的工具:Git & GitHub
這兩個工具是如何讓我們的軟體開發過程不再那麼坎坷?就讓我們看下去~

1.什麼是Git?

(1)概念

Git是目前世界上最流行也最先進的分散式版本控制系統(Distributed Version Control System),我們可以想成它是個專門幫我們管理專案的歷史紀錄以及進度儲存的工具。
接下來你可能就要問說「什麼是分散式版本控制系統(DVCS)呀?」
簡單解釋DVCS是一種管理軟體程式碼變更的方式,它讓每個開發者都擁有專案完整的歷史記錄副本。

(2)功能與應用範例

提交(Commit)與追蹤歷史

功能:
提交是將檔案在特定時間點的「快照」永久記錄到本地儲存庫的動作。每次提交都會附帶一個唯一的 ID (Hash) 和一條提交訊息,用來描述這次變更的內容。
舉例:
將變更加入暫存區 (git add .),然後執行提交,專案的歷史中就多了一個「存檔點」,內容是新增導覽列後的全部檔案狀態。

git commit -m "新增首頁導覽列 (Navbar) 設計"

分支(Branch)

功能:
分支是將專案開發線路分離出來的方法。它允許開發者在一個獨立、安全的工作空間中開發新功能或修復錯誤,而不會影響到主線程式碼(通常是 main 或 master)。
舉例:
開發一個複雜的「使用者登入」功能,但不想讓不穩定的程式碼影響到正在運行的專案,就可以將所有開發工作都發生在 feature/user-login 這個分支上。主線 main 保持穩定,如果需要發布緊急修復,也能直接在 main 上進行,互不干擾。

git checkout -b feature/user-login

合併(Merge)

功能:
當分支上的新功能或修復工作完成並穩定後,需要將該分支的變更整合回主線或其他指定分支。
舉例:
feature/user-login 上的所有程式碼變更都被整合到 main 分支中,主線就擁有了新的登入功能。

git checkout main
git merge feature/user-login

版本還原(Revert / Reset)

功能:
這是版本控制最實用的功能之一,它允許撤銷或回溯到先前的任何一個提交狀態。
舉例:
發現最近的兩個提交中包含了一個嚴重的錯誤,想要取消這兩次變更。

  • 還原
git revert <目標提交ID>
  • 重設
git reset --hard <目標提交ID>

遠端同步(Push / Pull)

功能:
在分散式系統中,Push 和 Pull 用於與遠端伺服器交換變更(像GitHub就是其中一種方式),實現團隊成員之間的協同合作。
舉例:
想要將檔案分享給其他成員共享工作進度的話,可以利用:

  • 推送(Push)
git push origin <您的分支名稱>
  • 拉取(Pull)
git pull origin <您的分支名稱>

如此一來,我們就可以與遠端儲存庫保持同步,團隊成員之間都可以看到最新的工作項目。

2.什麼是 GitHub?

(1)概念

如果說 Git 是一種版本控制工具,那麼 GitHub 就是一個基於 Git 的線上程式碼託管平台 (Cloud-Based Hosting Service)
GitHub是一個專為軟體開發團隊和開源社群設計的大型雲端協作中心或程式碼社交網路,它讓使用 Git 的所有功能變得更簡單、更視覺化,並加入了強大的團隊協作和專案管理功能。

(2)功能與應用範例

GitHub 的功能遠超單純的程式碼儲存,它是一個完整的開發生命週期平台。

程式碼倉庫 (Repository) 託管

功能:
提供雲端空間來存放 Git 專案(即儲存庫或 Repo),作為團隊所有成員同步程式碼的「中央集散地」。
舉例:
我們在本地使用 Git 寫好了一個網站專案,並把這個專案 push 到 GitHub 上的 my-awesome-website 儲存庫。團隊成員只需要 clone 這個遠端儲存庫,就能取得完整的程式碼和歷史紀錄。

拉取請求 (Pull Request, PR)

功能:
PR 是 GitHub 最重要的協作機制,當開發者在自己的分支上完成工作並想將其合併到主線時,他們會發起一個 PR,這不是一個「拉取」的命令,而是一個請求審查與合併的通知
舉例:
我們在 feature/new-feature 分支上完成了一個功能,並向主線 (main) 發起一個 Pull Request。
• 團隊成員可以在 PR 頁面上逐行審查我們的程式碼變更,也可以在特定的程式碼行下留言提問或要求修改,像是說「這個變數命名可以更清楚一些...」。
• 只有在所有審查意見都解決,並且獲得至少一個核准 (Approval) 後,該分支的程式碼才能安全地被合併 (Merge) 到主線。

問題追蹤 (Issues Tracking)

功能:
一個內建的專案管理工具,使用者可以用它來報告錯誤 (Bug)、提出功能請求 (Feature Request) 或進行專案討論。
舉例:
一個使用者發現我們的網站登入按鈕點擊無反應時,他可以在我們的 GitHub 儲存庫中建立一個新的 Issue,標題為:「登入按鈕在 Chrome 瀏覽器上無效」。開發團隊可以給這個 Issue 貼上標籤 (Labels)(例如 bug、critical),並指派給特定開發者。這樣一來,所有人都知道這個錯誤正在被追蹤和處理。

GitHub Actions (自動化工作流程)

功能:
這是一個強大的** CI/CD (持續整合/持續部署) 工具**,,它允許我們設定在某些事件發生時自動執行的工作流程。
舉例:
當設定了一個 GitHub Action,任何程式碼被合併到主線 (main 分支) 時。
• 自動執行所有單元測試,確保代碼沒有問題。
• 如果測試通過,自動將網站部署到我們的伺服器上。

程式碼社交與展示 (Social Coding)

功能:
GitHub 是一個全球最大的開源社群中心,它提供個人檔案頁面來展示我們的貢獻、參與的專案,以及程式碼技能。
舉例:
若我們積極參與多個開源專案,並透過 PR 貢獻程式碼後,這些貢獻都會顯示在個人主頁熱力圖 (Contribution Graph) 上。
• 對於潛在雇主來說,GitHub 個人頁面成了事實上的程式設計履歷,可以直接看到受僱者工作品質和協作能力。

3.Git 與 GitHub 的結合

在實際專案開發中,僅僅會使用 Git 還不夠,當與團隊協作時,搭配 GitHub 就能形成一套完整的工作流。接下來以下整理出四個主要階段,分別從「專案啟動」到「功能開發」、「分享與審查」,最後到「整合與部署」,讓大家快速掌握 Git 與 GitHub 的結合方式~
Git 與 GitHub 的結合,能將分散式版本控制的理念發揮到極致,形成了一個標準且高效的協作流程,通常稱為** Git/GitHub 工作流 (Workflow)**。

(1)專案啟動 (本地 Git + 遠端 GitHub)

步驟 Git/GitHub 功能 說明
初始化 GitHub Repository 在 GitHub 上建立一個新的儲存庫 (Repository)。
取得代碼 git clone 使用 git clone 將遠端儲存庫複製到本地電腦。

(2)功能開發 (本地 Git)

步驟 Git 功能 說明
隔離開發 git branch / checkout 建立獨立分支,確保不影響主線程式碼的穩定性。
紀錄進度 git add / git commit 將修改與進度保存到本地 Git 歷史中。

(3)分享與審查 (GitHub 協作)

步驟 Git/GitHub 功能 說明
推送變更 git push 將本地分支的提交推送到遠端儲存庫。
發起審查 Pull Request 在 GitHub 上建立 PR,請求將代碼合併至主線。
程式碼審查 Code Review 團隊成員透過 PR 進行檢視與評論。

(4)整合與部署 (GitHub 自動化)

步驟 Git/GitHub 功能 說明
持續整合 GitHub Actions PR 建立後自動執行測試腳本,測試失敗則禁止合併。
最終合併 Merge PR 測試通過後,將分支代碼正式合併到主線。
持續部署 GitHub Actions 合併完成後,自動將最新代碼部署到正式環境。

原本我只是以為這兩個工具能幫助解決存檔問題,但實際接觸後才發現,Git 與 GitHub 的結合早已超越了工具本身,它們更代表了一種開發文化。Git 給了我一張程式碼的安全網,讓我能勇敢嘗試;GitHub 的 PR 與 Code Review,則讓合作過程透明又充滿信任。掌握這些,不只是學會寫程式,而是學會在現代軟體世界中真正參與、交流與成長。


上一篇
[Day23]邊玩邊練打字!用 Python 做一個 Typing Game
下一篇
[ Day25 ] 小小短碼,大大學習:用 Python 打造屬於自己的短網址工具
系列文
軟體開發養成計畫:以小程式實作深化開發能力25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言