首先,你一定會問幹嘛這樣做。我在上回的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 的節點完全是分開的: