如何建立一個沒有 Parent 的獨立 Git branch

首先,你一定會問幹嘛這樣做。我在上回的Git 演講中有提到:在 Git,你可以建立毫不相關的分支,用來保存其他資訊,就像目錄一樣。這 Branch 的用途不會被 Merge 進開發主幹,是完全獨立的。

實務上的一個應用,就是 Github 提供的 Github Pages 功能,只要你在專案下開一個 branch 叫做 gh-pages,那這個 branch 的內容就會變成靜態網頁。我之前的作法是先分支出來,然後再 commit 一次砍掉所有檔案。雖然結果是ok可以用啦,但是總覺得 gh-pages 這 branch 有 parent 就是意思不對勁,它是完全獨立於主幹的,不應該有 parent 資訊。

剛突然想到這個問題可以 google 看看(Github Pages上其實也有寫 XD),還真的有:

方法一 (source)

因為 git branch 預設是從 HEAD 分支,所以可以這樣 Hack HEAD:

echo ref: refs/heads/newbranch > .git/HEAD
git rm -rf .   # 砍掉所有檔案重來
.....   # 加新檔案
git add .
git commit -m 'create new branch'

方法二(source)

Git 1.7.2 之後版本有支援 –orphan 參數:

git checkout --orphan newbranch
git rm -rf .    # 砍掉所有檔案重來
...  # 加新檔案
git add .
git commit -m 'create new branch'

方法三(source)

git symbolic-ref HEAD refs/heads/newbranch
rm .git/index
git clean -fdx
...  # 加新檔案
git add .
git commit -m 'create new branch'

結果就像是這樣,master 跟 newbranch 的節點完全是分開的:

One thought on “如何建立一個沒有 Parent 的獨立 Git branch

Leave a Reply