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 of local repo.
git branch
# List the branches of remote repo.
git branch -r
# List all branches of local and remote repos.
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)裡衝突的內容,進行手動修正。
some.py 衝突內容範例:
<<<< HEAD : 目前分支 (main) 的內容>>>> fix_something: 要合併的分支 (fix_something) 內容
<<<<<<< HEAD
print("Keep me!")
=======
print("No, keep me instead!")
>>>>>>> fix_something
完成後,依序再執行:
git add some.py
git status
# Check if the conflict has been fixed
git commit
檢視合併的紀錄
git log --graph --oneline
如果合併檔案的衝突內容太複雜,且無法有效地修正,可以使用以下指令,放棄這次分支的合併,並且讓專案回到合併前的內容。
git merge --abort