什麼是Git工作流?¶
在多人協作開發中,Git不僅是一個版本控制工具,更是團隊協作的“交通規則”。工作流(Workflow)就是大家約定好的一套提交代碼、合併分支、管理版本的規則。它能讓代碼提交有序、追蹤問題簡單,避免多人同時修改同一文件導致的混亂。
常用分支策略(簡化版)¶
對於初學者,最推薦的是簡化版Git Flow,核心思想是:
- 主分支(通常叫main或master):永遠保持可部署的穩定代碼,只接受合併完成的功能。
- 功能分支:從主分支創建,用於開發新功能或修復bug,每個功能獨立一個分支。
- 合併規則:功能完成後,通過合併到主分支發佈,合併前需測試。
必學基礎命令(附場景)¶
| 命令 | 作用 | 場景舉例 |
|---|---|---|
git clone <倉庫地址> |
克隆遠程倉庫到本地 | 第一次獲取項目代碼 |
git checkout -b <分支名> |
創建並切換到新分支 | 創建功能分支:git checkout -b feature/login |
git add . |
將修改的文件暫存 | 開發完代碼後,先暫存所有改動 |
git commit -m "提交信息" |
提交暫存的內容 | 寫清楚改動:git commit -m "完成登錄表單UI" |
git status |
查看工作區狀態 | 隨時檢查是否有未提交的改動 |
git pull origin <主分支> |
拉取主分支最新代碼 | 確保功能分支與主分支同步 |
git merge <分支名> |
合併分支 | 把功能分支合併到主分支 |
git push origin <分支名> |
推送分支到遠程倉庫 | 把本地分支推到GitHub/GitLab等平臺 |
完整工作流步驟(以「開發登錄功能」爲例)¶
1. 準備工作:確保主分支最新¶
假設主分支叫main,先確認本地main分支是最新的,避免創建分支時遺漏最新代碼:
# 切換到main分支
git checkout main
# 拉取主分支最新代碼(如果是遠程倉庫)
git pull origin main
2. 創建功能分支¶
從main分支創建一個功能分支(比如開發登錄功能),命名建議:feature/功能名:
git checkout -b feature/login
這條命令等價於:
git branch feature/login(創建分支)+git checkout feature/login(切換分支)
3. 開發與提交代碼¶
在feature/login分支上寫代碼,完成後提交:
# 查看改動了哪些文件
git status
# 暫存所有改動(也可以用git add <文件名>單獨暫存)
git add .
# 提交併寫清晰的提交信息
git commit -m "實現登錄表單輸入框和按鈕"
提交信息小技巧:寫清楚“做了什麼”,比如“修復登錄按鈕點擊無反應”“添加驗證碼邏輯”,方便後續回滾或查看歷史。
4. 同步主分支更新(避免衝突)¶
如果主分支有其他人提交了新代碼(比如修復了主分支的bug),需要把主分支更新拉到功能分支,避免合併時衝突:
# 先切回主分支拉取最新代碼
git checkout main
git pull origin main
# 再切回功能分支,合併主分支更新
git checkout feature/login
git merge main
如果沒有衝突,Git會自動合併;如果有衝突,終端會提示“Automatic merge failed”,見「衝突解決」部分。
5. 推送功能分支到遠程倉庫¶
功能分支開發完成後,推送到遠程倉庫,方便團隊協作查看:
git push origin feature/login
推送到遠程後,可在GitHub/GitLab的網頁端看到這個分支,此時可發起「合併請求(PR)」到主分支。
6. 合併到主分支(發佈)¶
團隊代碼審查通過後,將功能分支合併到主分支:
- 本地合併(若直接在終端操作):
# 切換到主分支
git checkout main
# 合併功能分支
git merge feature/login
# 推送合併後的主分支到遠程
git push origin main
- 通過PR合併(團隊協作更常用):在GitHub/GitLab網頁上,從
feature/login分支發起PR,選擇合併到main分支,合併後刪除功能分支。
7. 清理已完成的分支¶
合併完成後,刪除本地和遠程的功能分支,保持倉庫整潔:
# 刪除本地功能分支
git branch -d feature/login
# 刪除遠程功能分支(推送到遠程)
git push origin --delete feature/login
衝突解決(新手必看)¶
衝突發生場景:多人同時修改了同一文件的同一行,Git無法自動決定保留哪份代碼。
解決方法:
1. Git會提示衝突文件(如login.js),打開文件後找到衝突標記:
<<<<<<< HEAD(當前分支的代碼)
const username = "admin";
=======(分割線)
const username = "user";
>>>>>>> feature/login(待合併分支的代碼)
- 手動編輯文件,決定保留哪部分代碼(或修改合併邏輯),刪除衝突標記
<<<<<<<、=======、>>>>>>>。 - 保存文件後,標記爲已解決並提交:
git add login.js
git commit -m "解決登錄功能分支與主分支的衝突"
總結與注意事項¶
- 分支命名規範:主分支
main,功能分支feature/xxx,bug修復分支bugfix/xxx,保持清晰。 - 提交前檢查:用
git status確認改動文件,避免提交不該提交的內容(如臨時文件)。 - 小步提交:每次只提交“一個小功能”,方便追蹤問題,比如“實現登錄框佈局”“修復密碼框樣式”分開提交。
- 主分支永遠乾淨:只合並已測試通過的代碼,禁止直接在
main分支寫代碼或提交。
掌握這個流程後,你就能用Git高效管理代碼版本,讓團隊協作更順暢。遇到問題時,多查git --help或Git官方文檔,逐步熟悉命令的用法~