Contents

git建立空分支

在 Git 中,一般的分支都有完整的提交歷史,且與主分支(main/master)有共同的祖先節點(parent commit)。但有些情境需要一個完全獨立、沒有任何歷史紀錄的分支,這就是 Orphan Branch(孤立分支)。

為什麼需要孤立分支?

常見使用場景:

  • GitHub Pages(gh-pages 分支):存放靜態網站的打包結果,與原始碼分開管理,不需要包含開發歷史
  • 文件分支:專門存放文件,獨立於程式碼的提交歷史
  • 全新的乾淨版本:需要重構整個專案,不想保留舊歷史

建立孤立分支的完整流程

第一步:建立 orphan 分支

1
git checkout --orphan gh-pages

這個指令會:

  1. 建立名為 gh-pages 的新分支
  2. 切換到該分支
  3. 保留目前工作目錄的所有檔案(但這些檔案尚未提交,處於 staged 狀態)

第二步:移除所有既有的檔案

因為 orphan 分支剛建立時,工作目錄還有原本分支的檔案,必須清除:

1
2
3
4
5
# 移除所有已追蹤的檔案
git rm -rf .

# 確認目錄已清空(只有 .git 資料夾)
ls -la

第三步:建立初始提交

孤立分支至少需要一個提交才能正常使用:

1
2
3
4
5
# 建立一個初始檔案
echo "# GitHub Pages" > README.md

git add README.md
git commit -m "Initial commit for gh-pages"

第四步:推送到遠端

1
git push origin gh-pages

GitHub Pages 實際應用

許多靜態網站工具(如 Hugo、Jekyll)都有指令可以自動部署到 gh-pages 分支:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Hugo 部署
hugo
cd public
git init
git checkout -b gh-pages
git add .
git commit -m "Deploy"
git push -f origin gh-pages

# 或使用 gh-pages npm 套件
npm run build
npx gh-pages -d build

查看孤立分支

1
2
3
4
5
# 列出所有分支
git branch -a

# 確認分支的提交歷史(孤立分支沒有祖先)
git log --oneline --graph

注意事項

  • git checkout --orphan 建立的分支在第一次提交之前,並不會出現在 git branch 清單中
  • 孤立分支與其他分支完全獨立,無法進行 merge(除非使用 --allow-unrelated-histories
  • 如果要刪除孤立分支的所有歷史,可以先 git rm -rf . 再重新提交

參考資料