Git 的主要优势之一是它能够将工作“fork”到不同的分支中。
如果您是唯一使用存储库的人,那么好处并不明显,但是一旦您开始与其他许多贡献者一起工作,分支就至关重要。 Git 的分支机制允许多个人同时在一个项目上工作,甚至在同一个文件上工作。用户可以引入不同的功能,彼此独立,然后将更改合并回主分支。专门为某个目的创建的分支,例如添加新功能或修复已知错误,有时称为主题分支。
一旦开始使用分支,了解如何管理它们就很有帮助。 以下是开发人员在现实世界中使用 Git 分支执行的最常见任务。
使用 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>
使用 Git 查找远程主题分支的作者
如果您是存储库管理器,您可能需要执行此操作,以便通知未使用分支的作者应删除该分支。
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 分支的工作方式存在细微差别,具体取决于您要 fork 代码库的时间点、存储库维护者管理分支的方式、压缩、变基等等。 以下是三篇关于此主题的进一步阅读文章
- 用乐高类比解释 Git 分支,作者:Seth Kenlon
- 我的安全使用 Git push 命令指南,作者:Noaa Barki
- Git 分支指南,作者:Kedar Vijay Kulkarni
3 条评论