一个 git 仓库常常有不同的分支,开发者可以在各个分支处理不同的特性,或者在不影响主代码库的情况下修复 bug。
仓库通常有一个 master
或者 main
分支,表示主代码库。开发人员创建其他分支,处理不同的特性。
在项目的迭代过程中,我们通常会在本地或远程创建很多分支。分支多了之后,管理很不方便,所以我们可能会希望定期清理这些分支。
今天我们将从删除本地分支、删除远程分支和批量删除本地分支三个方面介绍删除分支的一些方法。
说到删除本地分支,大家首先想到的可能是下面这个:
git branch (-d|-D) <branch>
比如:git branch -d fix/authentication
。
如果你还在需要删除的分支上,那么 Git
是不允许你删除这个分支的。所以,请记得先切到其他分支:git checkout master
。
那么考一下大家,-d
和 -D
有什么区别呢?
我们也不卖关子,直接解答:
-d
选项是 --delete
的别名,仅当分支已完全合并到其上游分支中时才会删除该分支。-D
选项是 --delete --force
的别名,允许删除分支,无论其合并状态如何。所以,当一个分支被推送并合并到远程分支后,-d 才会本地删除该分支。如果一个分支还没有被推送或者合并,那么可以使用-D强制删除它。
使用以下命令可以远程删除分支:
git push <remote> --delete <branch>
比如:git push origin --delete fix/authentication
,这个分支就被远程删除了。
也可以使用这行简短的命令来远程删除分支:
git push <remote> :<branch>,
比如:git push origin :fix/authentication
。
如果你得到以下错误消息,可能是因为其他人已经删除了这个分支。
error: unable to push to unqualified destination: remoteBranchName The destination refspec neither matches an existing ref on the remote nor begins with refs/, and we are unable to guess a prefix based on the source ref. error: failed to push some refs to 'git@repository_name'
那么我们怎么将远程已删除的分支信息,同步到本地呢?
我们可以使用以下命令同步分支列表:
git fetch -p
-p
是 prune
的简写,意思是“精简”。
这样,你的分支列表里就不会显示已远程被删除的分支了。
上面对删除本地分支的方法进行了介绍,当我们本地的分支较多时,手动逐条删除就很费劲了。
这个时候,我们就需要批量操作分支删除的命令。
git branch | xargs git branch -d
git branch | grep 'xxx' | xargs git branch -d
简单解释一下上面的命令:
|
:管道命令,用于将一串命令串联起来。前面命令的输出可以作为后面命令的输入。git branch
:用于列出本地所有分支。grep
:搜索过滤命令。使用正则表达式搜索文本,并把匹配的行打印出来。xargs
:参数传递命令。用于将标准输入作为命令的参数传给下一个命令。当然,你可能觉得如果我需要保留部分指定分支时,操作依然不太方便,那么可以使用下面这个方法:
git branch --merged |grep -v "*" | grep -v "release" > ./branch.txt
xargs git branch -d < ~/branch.txt
git branch --merged
可以查看哪些分支已经合并到当前分支,此列表下没有* 标记的分支可以删除,不会报错。
先通过上面的第一个命令,将所有本地已经合并到当前分支的分支,写入到 branch.txt
(排除release分支和当前分支) – 建议在release或者master分支执行。
然后我们根据实际需求,编辑 branch.txt
文件,确认删除分支。再执行第二条命令,将 branch.txt
中列出的分支使用git branch -d
命令进行删除。
上述操作命令简单明了,特别是通过自行编辑 branch.txt
文件,避免想要保留的分支被删除。
以上命令还可以继续简化,不过要注意不要删错了分支:
git branch --merged |grep -v "*" | grep -v "release" |xargs git branch -D
再说一次,xargs 命令配合 | 使用,可以将前一条指令的输出流向,作为后一条指令的参数输入。
我们今天介绍了使用 git
删除分支的一些方法,今后的文章中,也会介绍其他的 git
使用技巧,觉得本文有用的小伙伴,可以帮忙点在“在看”,让更多的朋友看到咱们的文章。
然后,给“前端面试题宝典”的辅导服务打下广告,目前有简历指导、模拟面试和面试全流程辅导的增值服务,如果有感兴趣的伙伴,可以联系小助手(微信号:interview-fe)了解详情哦~