2012-11-29

Git: 重新命名分支 (branch)

近來凍仁開始使用 Git 來管理些瑣碎的事情,不管是上班會用到的 code 還是自己的環境設定,也曾在前公司約 50 台的 Server 上實作 pull 同步 [1],但在大量使用 branch 的情況就很容易遇見命名衝突的問題。

[ jonny@precise ~ ]
$ git branch [Enter]
   dev
* master
在 branch 已有 dev 的情況下是無法建立 dev/hello 的。

其本機的 branch 要更名是很簡單的,但 remote (遠端) 的部份就棘手許多,而且與 remote branch 名稱重複時是無法 push 上去的,以下為凍仁實作過可行的解法,其原理就是先行將 remote branch 砍掉再上傳新的 branch。

1. 列出所有的 branch (local & remote)。
[ jonny@precise ~ ]
$ git branch -a [Enter]
   dev
* master
   origin/HEAD -> origin/master
   origin/dev
   origin/master


2. 重新命名本機 branch 前,記得 checkout 離預更名的 branch,此範例裡就是得 checkout 至 master。
[ jonny@precise ~ ]
$ git branch -m dev dev/hello [Enter]

3. 刪除遠端的 branch。
[ jonny@precise ~ ]
$ git push origin :dev [Enter]

4. 上傳本機的 branch 至遠端的 branch。
[ jonny@precise ~ ]
$ git push origin dev/hello [Enter]

5. 完成。
[ jonny@precise ~ ]
$ git branch -a [Enter]
   dev/hello
* master
   origin/HEAD -> origin/master
   origin/dev/hello
   origin/master



延伸閱讀:
[1] IBM solidDB 6.3 and IBM solidDB Universal Cache 6.3 Information Center
[Book] Unix 與 Linux 自動化管理

資料來源:
Renaming your 'master' branch