Git 教程:重命名分支、刪除分支、查看分支作者
掌握管理本地/遠程分支等最常見的 Git 任務。
Git 的主要優勢之一就是它能夠將工作“分叉”到不同的分支中。
如果只有你一個人在使用某個存儲庫,分支的好處是有限的。但是,一旦你開始與許多其他貢獻者一起工作,分支就變得必不可少。Git 的分支機制允許多人同時處理一個項目,甚至是同一個文件。用戶可以引入不同的功能,彼此獨立,然后稍后將更改合并回主分支。那些專門為一個目的創建的分支,有時也被稱為主題分支topic branch,例如添加新功能或修復已知錯誤。
當你開始使用分支,了解如何管理它們會很有幫助。以下是開發者在現實世界中使用 Git 分支執行的最常見任務。
重命名分支
有時候,你或許會錯誤地命名了一個分支,或者你會想要在內容合并到主分支后,使用同一個分支在不同的錯誤或任務之間切換。在這種情況下,重命名主題分支就會很有幫助。
重命名本地分支
1、重命名本地分支:
$ git branch -m <old_branch_name> <new_branch_name>
當然,這只會重命名你的分支副本。如果遠程 Git 服務器上存在該分支,請繼續執行后續步驟。
2、推送這個新分支,從而創建一個新的遠程分支:
$ git push origin <new_branch_name>
3、刪除舊的遠程分支:
$ git push origin -d -f <old_branch_name>
重命名當前分支
當你要重命名的分支恰好是當前分支時,你不需要指定舊的分支名稱。
1、重命名當前分支:
$ git branch -m <new_branch_name>
2、推送新分支,從而創建一個新的遠程分支:
$ git push origin <new_branch_name>
3、刪除舊的遠程分支:
$ git push origin -d -f <old_branch_name>
使用 Git 刪除本地和遠程分支
為了保持存儲庫的整潔,通常建議你在確保已將內容合并到主分支后,刪除臨時分支。
刪除本地分支
刪除本地分支只會刪除系統上存在的該分支的副本。如果分支已經被推送到遠程存儲庫,它仍然可供使用該存儲庫的每個人使用。
1、簽出存儲庫的主分支(例如 main 或 master):
$ git checkout <central_branch_name>
2、列出所有分支(本地和遠程):
$ git branch -a
3、刪除本地分支:
$ git branch -d <name_of_the_branch>
要刪除所有本地主題分支并僅保留 main 分支:
$ git branch | grep -v main | xargs git branch -d
刪除遠程分支
刪除遠程分支只會刪除遠程服務器上存在的該分支的副本。如果你想撤銷刪除,也可以將其重新推送到遠程(例如 GitHub),只要你還有本地副本即可。
1、簽出存儲庫的主分支(通常是 main 或 master):
$ git checkout <central_branch_name>
2、列出所有分支(本地和遠程):
$ git branch -a
3、刪除遠程分支:
$ git push origin -d <name_of_the_branch>
查看遠程主題分支的作者
如果你是存儲庫管理員,你可能會有這個需求,以便通知未使用分支的作者它將被刪除。
1、簽出存儲庫的主分支(例如 main 或 master):
$ git checkout <central_branch_name>
2、刪除不存在的遠程分支的分支引用:
$ git remote prune origin
3、列出存儲庫中所有遠程主題分支的作者,使用 --format 選項,并配合特殊的選擇器來只打印你想要的信息(在本例中,%(authorname) 和 %(refname) 分別代表作者名字和分支名稱):
$ git for-each-ref --sort=authordate --format='%(authorname) %(refname)'
refs/remotes
示例輸出:
tux refs/remotes/origin/dev
agil refs/remotes/origin/main
你可以添加更多格式,包括顏色編碼和字符串操作,以便于閱讀:
$ git for-each-ref --sort=authordate \
--format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p)%(align:25,left)%(color:yellow) %(authorname)%(end)%(color:reset)%(refname:strip=3)' \
refs/remotes
示例輸出:
01/16/2019 03:18 PM tux dev
05/15/2022 10:35 PM agil main
你可以使用 grep 獲取特定遠程主題分支的作者:
$ git for-each-ref --sort=authordate \
--format='%(authorname) %(refname)' \
refs/remotes | grep <topic_branch_name>
熟練運用分支
Git 分支的工作方式存在細微差別,具體取決于你想要分叉代碼庫的位置、存儲庫維護者如何管理分支、壓扁squashing、變基rebasing等。