Skip to main content

Branch

Tips
  • Branch : 指向特定 commit 的指標,代表專案中獨立的開發流程
  • HEAD: 指向目前的分支
  • main (master): 新專案建立時的預設分支,通常用於主版本
  • branch-name 可使用斜線做分類識別,例如 test/feature1, dev/feature1
  • 檢視目前 branch (HEAD) 的版本: git branch 或 git log -1 
  • 不同 branch,專案目錄裡的檔案以及 commit 紀錄也都不同
Git branch
# List all the branches
git branch
git branch -a

# Create new branch
git branch <branch-name>
git checkout <branch-name>

# Alternatively, using the following one-liner command
# <origin-name> 為空白時,預設為目前 HEAD 版本, 例如 origin/main
git checkout -b <branch-name> <origin-name>

# Remove a branch
# NOTE: 如果 branch 有內容異動, 移除時系統會有錯誤提示
git branch -d <branch-name>
建立分支
# Clone 專案
git clone http://your.company.com/yourname/my_proj.git
cd my_proj

# 建立一個來源是 origin/main 的分支版,名稱為 test/util-cmd,並且切換(checkout)至分支版
git checkout -b test/util-cmd origin/main
git branch -a

# Change your codes

# 更新至本地專案庫
git add .
git commit -m "Added a new branch test/util-cmd"

# 上傳至遠端專案庫
git push --set-upstream origin test/util-cmd
Git merge

在一般的開發流程,建立新分支來開發新功能或修復 bug,在分支完成開發後,最後會將分支的內容合併到主分支 (main/master)。

  • git merge <branch-name> : 合併分支 <branch-name> 至目前分支
  • git merge --abort : 放棄目前的合併

分支 fix_something 合併指令

git checkout main
git merge fix_something

合併後如果系統顯示 Merge conflict,必須依照訊息內容,找出檔案(some.py)裡衝突的內容,進行手動修正,完成後,依序執行:

git add some.py
git status
# Check if the conflict has been fixed
git commit

檢視合併的紀錄

git log --graph --oneline

如果合併檔案的衝突內容太複雜,無法有效地修正,可以使用以下指令,放棄這個分支的合併,並且專案回到合併前的內容。

git merge --abort