跳至主要内容

3 篇文章 含有標籤「Github」

檢視所有標籤

Git Flow 介紹與 GitHub Flow 介紹入門教學筆記 | 學習筆記

· 閱讀時間約 5 分鐘
KD Chang
Builder, Curator & Lifelong Learner

在軟體開發中,版本控制是協作開發中至關重要的工具。Git 作為當前最受歡迎的版本控制系統,其強大的分支管理和版本控制功能,使得開發團隊能夠高效地進行協作。兩種常見的 Git 工作流是 Git Flow 和 GitHub Flow,這些工作流提供了清晰的分支管理策略,讓團隊可以更加有序地開發和部署代碼。本文將介紹 Git Flow 和 GitHub Flow 的基本概念、使用方法,以及它們之間的區別。

一、Git Flow 介紹

Git Flow 是一個基於 Git 的分支管理模型,主要由 Vincent Driessen 提出,旨在幫助開發團隊實現規範化的分支管理,並對不同開發階段的代碼進行有效的管理。Git Flow 工作流適合需要頻繁發布新版本的項目,並且開發流程中包含多個階段,如開發、測試、發佈等。其工作流程通常包含以下幾個核心分支:

1.1 主要分支​

  1. master 分支: master 分支是 Git Flow 中的核心分支,所有穩定的代碼都應該存在於此。每當一個新版本的代碼準備好發佈時,都會從 develop 分支合併到 master,並標記相應的版本號。這個分支通常只包含穩定的代碼,並且代表了隨時可以部署的代碼。

  2. develop 分支: develop 分支用於開發中的代碼。所有的功能開發都應該從這個分支進行,並且當開發完成後,合併回 develop。這個分支是整個項目的集成區,開發人員應該從 develop 分支開始開發新功能。

1.2 輔助分支​

  1. feature 分支: feature 分支用於開發新的功能。每個新功能都應該從 develop 分支創建一個新的 feature 分支,並且在功能開發完成後,將該分支合併回 develop 分支。feature 分支的命名通常為 feature/<功能名稱>。

  2. release 分支: 當 develop 分支上的代碼準備好進入測試階段時,會創建一個 release 分支。這個分支用來準備最終的發佈版本。在 release 分支上進行的主要工作包括 bug 修復、文檔編寫等,確保最終版本的穩定性。當測試完成並且代碼準備發佈時,release 分支會被合併到 master 和 develop 分支。

  3. hotfix 分支: hotfix 分支用於修復已經發佈到 master 分支的緊急錯誤。當發佈的版本發現重大問題時,可以立即從 master 分支創建 hotfix 分支,進行修復後,將其合併回 master 和 develop 分支。

1.3 Git Flow 的流程​

Git Flow 的流程大致如下:

  • 開發新功能時,從 develop 分支創建 feature 分支。
  • 當 feature 分支開發完成後,合併回 develop 分支。
  • 當代碼達到穩定版本,創建 release 分支,進行測試和 bug 修復。
  • 測試完成後,將 release 分支合併回 master 和 develop 分支,並標註版本。
  • 若發現緊急錯誤,從 master 分支創建 hotfix 分支,進行修復並合併回 master 和 develop。

二、GitHub Flow 介紹

GitHub Flow 是 GitHub 提出的另一種工作流,主要針對快速迭代和持續集成的開發模式。與 Git Flow 複雜的分支管理相比,GitHub Flow 更加簡單和輕量,適合需要快速交付和頻繁部署的團隊。GitHub Flow 主要有以下幾個步驟:

2.1 GitHub Flow 的基本流程​

  1. 創建分支: 每當開始一個新功能或修復一個 bug 時,都應該從 main 分支創建一個新的分支。這個分支通常用來開發新的特性或修復某個問題。

  2. 開發與提交: 在新創建的分支上進行開發,並定期將代碼提交到遠程倉庫。這些提交應該是增量的,便於代碼審查和測試。

  3. 發送 Pull Request: 當開發完成後,將自己的分支提交為 Pull Request(PR),並請求團隊成員進行代碼審查。PR 是 GitHub Flow 中的關鍵步驟,能夠確保代碼的質量和協作。

  4. 代碼審查與測試: 團隊成員進行代碼審查,確保代碼的質量和功能正確性。GitHub Flow 推崇頻繁的測試和集成,因此在 Pull Request 發送後,通常會自動觸發 CI(持續集成)測試,檢查代碼是否有錯誤。

  5. 合併分支: 經過代碼審查和測試後,Pull Request 被批准,並將代碼合併到 main 分支。此時,新的代碼版本已經可以進行部署。

  6. 部署與發佈: GitHub Flow 的一大優勢是可以實現持續部署。當代碼合併到 main 分支後,可以立即部署到生產環境,快速交付新版本。

2.2 GitHub Flow 的特點​

GitHub Flow 的流程非常簡單,沒有像 Git Flow 那樣的複雜分支結構,適合小型和中型的項目。它的優點在於快速迭代和持續交付,並且便於團隊成員協作。GitHub Flow 更加強調分支管理的簡化,並且強調測試和部署的自動化。

三、Git Flow 與 GitHub Flow 的比較

  • 分支結構: Git Flow 有多個分支(master、develop、feature、release、hotfix),適用於需要穩定版本發佈的團隊。而 GitHub Flow 只有 main 分支和特性分支,適用於快速迭代和持續集成的開發模式。

  • 適用場景: Git Flow 更適合複雜的開發流程,尤其是有多個版本和發佈周期的項目。GitHub Flow 更適合快速迭代的小型或中型項目,尤其是需要頻繁部署和交付的團隊。

  • 流程複雜度: Git Flow 的流程較為繁瑣,對於小型團隊來說可能會顯得過於複雜。GitHub Flow 流程簡單,適合希望保持敏捷和快速交付的團隊。

結論

Git Flow 和 GitHub Flow 各有優缺點,適用的場景也有所不同。選擇哪一種工作流,應根據團隊的規模、項目的複雜度以及發佈頻率來決定。對於需要穩定發佈和多版本管理的項目,Git Flow 是一個更好的選擇。而對於需要快速迭代和頻繁部署的小型項目,GitHub Flow 則是一個更簡單有效的選擇。

Git 指令學習筆記 | 學習筆記

· 閱讀時間約 6 分鐘
KD Chang
Builder, Curator & Lifelong Learner

Git 是現代軟體開發中最常使用的分散式版本控制系統,它幫助開發者管理源代碼的版本和協作。這篇教學將從基礎開始,介紹 Git 的常用命令並提供實際範例,幫助你熟悉如何使用 Git 來進行版本控制與協作。

1. 初始化 Git 倉庫 (git init)​

在專案資料夾中使用 git init 可以初始化一個新的 Git 倉庫,這樣就可以開始使用 Git 來管理專案中的檔案版本。

git init

執行後會在專案資料夾內建立一個 .git 的隱藏資料夾,這表示這個資料夾已經被 Git 所管理。

2. 查看當前狀態 (git status)​

在進行版本控制時,使用 git status 可以查看專案的當前狀態。這個命令會顯示哪些檔案已經被修改、哪些檔案尚未加入版本控制。

git status

這會列出所有變更過的檔案(包括已修改、尚未追蹤的檔案等)以及當前分支的狀態。

3. 新增檔案到暫存區 (git add)​

修改檔案後,必須先使用 git add 把檔案新增到暫存區,才可以進行提交。使用 git add 可以指定單一檔案或多個檔案,或者一次將所有檔案加入暫存區。

git add filename.txt

或將所有變更加入暫存區:

git add .

4. 提交變更 (git commit)​

將檔案從暫存區提交到本地版本庫使用 git commit。每次提交時,需要提供一個簡短的描述,解釋這次提交的內容。

git commit -m "新增使用者登錄功能"

5. 設定 Git 使用者資訊 (git config)​

在進行提交之前,必須設定 Git 的使用者名稱和電子郵件。這些資料會與每次提交關聯。

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

這會把你的名稱和郵箱寫入全域設定,未來每次提交都會使用這些設定。

6. 查看提交歷史 (git log)​

使用 git log 可以查看專案的提交歷史。這會顯示每次提交的詳細信息,包括提交哈希值、作者、日期和提交訊息。

git log

如果希望更簡潔的輸出,可以使用 --oneline 參數:

git log --oneline

7. 恢復檔案 (git restore)​

如果你修改了一些檔案並且還沒有提交,可以使用 git restore 恢復檔案到上次提交的狀態,撤銷變更。

git restore filename.txt

如果想撤銷暫存區的變更,可以使用:

git restore --staged filename.txt

8. 追蹤檔案變動紀錄 (git blame)​

如果你想查看某個檔案每一行是誰在什麼時候修改的,可以使用 git blame。

git blame filename.txt

這會顯示每一行的修改者與修改時間,有助於了解程式碼的歷史。

9. 建立分支 (git branch)​

在 Git 中,分支讓你能夠並行地進行多個工作。你可以使用 git branch 查看目前所有的分支。

git branch

要創建新的分支:

git branch feature-login

10. 切換分支 (git switch)​

要切換到不同的分支,可以使用 git switch。例如,切換到 feature-login 分支:

git switch feature-login

如果你要創建並切換到一個新的分支,可以加上 -c 選項:

git switch -c feature-register

11. 切換提交紀錄或分支 (git checkout)​

雖然 git switch 是較新的命令,但仍然可以使用 git checkout 切換分支或還原檔案。要切換到某個分支:

git checkout feature-login

若要還原某個檔案到指定的提交:

git checkout <commit_hash> filename.txt

12. 合併分支 (git merge)​

將不同分支的更改合併回主分支可以使用 git merge。首先切換到目標分支(例如 main),然後執行合併操作:

git switch main
git merge feature-login

如果有衝突,Git 會提示你解決衝突。

13. 重新整理提交歷史 (git rebase)​

git rebase 用來重新整理提交歷史,將一個分支的更改重新應用到另一個分支上,使歷史更為線性。

git switch feature-login
git rebase main

這會將 feature-login 分支的變更,重新應用到 main 分支的最新提交上。

14. 重置提交 (git reset)​

如果你想取消最近一次的提交,可以使用 git reset。使用 --soft 保留檔案變更,--hard 則會刪除變更:

git reset --soft HEAD^

這會將上一個提交撤回,但保留檔案變更;若使用 --hard,則會完全撤回提交及變更。

15. 查看操作紀錄 (git reflog)​

git reflog 可以幫助你查看 HEAD 的操作紀錄,即便你進行了 reset 或 checkout 等操作。

git reflog

這個命令列出所有曾經指向 HEAD 的 commit 參考,並且可以用來恢復丟失的提交。

16. 暫存變更 (git stash)​

如果你正在進行某些變更,但又需要切換到其他分支處理緊急問題,可以使用 git stash 暫時儲存未提交的變更:

git stash

這會暫時保存變更,並恢復工作目錄到最後一次提交的狀態。待你完成緊急工作後,可以使用 git stash pop 恢復變更。

17. 選擇性地應用提交 (git cherry-pick)​

git cherry-pick 讓你可以選擇性地將某個提交應用到當前分支。例如,將 feature-login 分支的某個提交應用到 main 分支:

git cherry-pick <commit_hash>

這對於選擇性地將某些特定變更移動到其他分支非常有用。

18. 子模組 (git submodule)​

當專案中有其他專案作為依賴時,可以使用 Git 子模組來管理。首先,將子模組加入專案:

git submodule add <repository_url> path/to/submodule

這會在專案中加入一個指向其他 Git 倉庫的子模組。在克隆專案時,記得加上 --recurse-submodules 來獲取子模組的內容。


總結

以上介紹了 Git 中一些常用的命令,這些命令幾乎涵蓋了日常開發中的大部分需求。熟練掌握 Git 讓你在開發過程中更加高效,無論是單人開發還是團隊協作,都能大大提高工作流的順暢性。如果你還有進一步的需求或疑問,隨時可以深入學習 Git 的進階技巧。

Git 入門教學筆記:從零開始學版本控制 | 學習筆記

· 閱讀時間約 4 分鐘
KD Chang
Builder, Curator & Lifelong Learner

為什麼要學 Git?​

在軟體開發中,版本控制是一個不可或缺的工具。Git 是目前最流行的版本控制系統,它能幫助你:

  • 記錄每次修改的歷史紀錄
  • 回復到任一個過去的狀態
  • 多人協作開發不衝突
  • 管理分支進行實驗性開發

無論是獨立開發者、團隊協作,還是參與開源專案,Git 都是你的好夥伴。


一、安裝 Git​

macOS​

brew install git

Ubuntu / Debian​

sudo apt update
sudo apt install git

Windows​

請至官網下載安裝:https://git-scm.com


二、基本設定​

第一次使用 Git 前,請先設定你的名稱與 Email(這會記錄在每次提交的資訊中):

git config --global user.name "你的名字"
git config --global user.email "you@example.com"

你也可以檢查目前的設定:

git config --list

三、建立本地倉庫(repository)​

建立一個新資料夾並初始化 Git​

mkdir my-project
cd my-project
git init

此時 .git/ 目錄會被建立,代表你已經在這個資料夾啟用了版本控制。


四、版本控制的基本流程​

Git 的工作流程大致分為三個區域:

  1. 工作區(Working Directory):你實際修改的檔案
  2. 暫存區(Staging Area):準備提交的檔案
  3. 版本庫(Repository):正式提交的版本歷史

1. 查看狀態​

git status

2. 將檔案加入暫存區​

git add 檔名
# 或加入全部變動檔案
git add .

3. 提交版本(commit)​

git commit -m "加入了首頁 HTML 結構"

五、版本紀錄與回溯​

查看提交紀錄​

git log

如果想要簡潔查看

git log --oneline

回到先前的狀態(例如最近一次提交)​

git checkout HEAD^
# 回到上上一個版本
git checkout HEAD~2

但請注意這樣會進入「detached HEAD」狀態,只是暫時查看,不適合繼續開發。


六、分支操作(branch)​

分支是 Git 強大的一環,可以讓你同時開發多個功能而互不干擾。

建立新分支​

git branch feature-login

切換分支​

git checkout feature-login

或合併成一行:

git checkout -b feature-login

合併分支​

切回主分支(通常是 main 或 master):

git checkout main
git merge feature-login

七、遠端倉庫(Remote Repository)​

若你使用 GitHub、GitLab 等服務,可以將本地專案推送到遠端:

新增遠端倉庫​

git remote add origin https://github.com/yourname/yourproject.git

推送本地分支​

git push -u origin main

拉取遠端最新變更​

git pull origin main

八、.gitignore 檔案​

.gitignore 用來指定不想被 Git 管理的檔案,例如:

node_modules/
.env
*.log
.DS_Store

建立一個 .gitignore 檔案,放進你專案根目錄,就能避免把不該版本控制的東西送到遠端倉庫。


九、常見狀況與解法​

修改後不小心沒 add 就 commit 了?​

可用下列方式補上:

git add 新增的檔案
git commit --amend

想撤銷修改?​

還沒 add 的:

git checkout -- 檔案名

已經 add 了但還沒 commit:

git reset HEAD 檔案名

十、總結:從習慣開始,讓版本控制變簡單​

熟悉 Git 的過程一開始可能會覺得繁瑣,但當你習慣了之後,它會成為你每天工作中不可或缺的工具。建議你在小專案中練習基本指令,隨手記錄每次的變更,透過良好的 commit message,讓未來的你感謝現在有好好整理的你。

如果你希望與他人協作開發,Git 更能大幅簡化流程、避免衝突。下一步,你可以學習 Pull Request(PR)、Git Flow、Rebase 等進階技巧,逐步精進你的版本控制能力。

參考文件

  1. Conventional Commits
  2. 約定式提交
  3. [Git] Conventional Commits 規範性提交
  4. git reflog - 還原大招
  5. 為你自己學 Git