整理 Git 仓库
在git中创建分支基本上是免费的,而且很容易做到。这导致了gitflow和其他分支相关工作流等技术的发展,这些技术现在在开发中很常见。
如果你有一个项目有很多开发人员在做,你会遇到项目中有很多分支的情况。一些将被合并,一些将在当前工作,还有一些将是已经工作但从未完成的分支(出于某种原因或另一种原因)。这可能会导致对正在处理的分支产生一些混淆,特别是如果您想对项目的当前运行状况进行监督。
例如,我曾经从另一个机构继承了一个项目,该项目在回购中包含250多个分支。虽然分支有一个结构良好的命名方案,但很难分辨哪些是正在处理的,哪些是已经合并的。这种情况令人困惑,因为我们正在查看的工作板只有5个正在处理的有效工单。为了继续执行代码,我需要清理其中一些分支。
在我看来,陈旧的分支(合并与否)就是技术债务。假设开发人员分支以添加修复项目中的错误的功能。在做了一些工作并将他们的分支推送到repo之后,由于项目中的优先级发生了变化,他们不得不转移到另一个功能上。如果该分支在6个月后仍然存在,那么将该工作合并到项目中是非常危险的,几乎肯定会更容易重新开始。
寻找合并的分支
也许最简单的决定是删除与主分支合并的分支。如果分支已与当前工作流合并,则应将其删除,除非在该分支上进行了进一步的工作。
要查找与您当前检出的分支(即HEAD)合并的分支,请使用以下--merged标志。结合-r标志允许我们与默认遥控器进行比较。
gitbranch-r--merged
要查找已与特定远程分支(例如origin/master)合并的分支,请使用以下命令。
gitbranch-r--mergedorigin/master
如果您愿意,您可以对开发分支执行此操作,但是如果开发分支与master合并,那么这将显示相同的信息。
这将打印出分支列表。比如这说明本地另外两个分支已经和master分支合并了。
origin/master origin/develop origin/feature-1
这为我们提供了一个明确的删除候选对象,即origin/feature-1。决定应该取决于代码在多长时间前合并为6个月前合并的分支,实际上不需要保留。
查找未合并的分支
一个稍微困难的决定是是否删除未合并的分支。每个分支都需要检查和检查以查看更改的内容,更重要的是更改原因。最终决定取决于代码是否可以(或应该)与上游分支合并。
要查找所有未合并的分支,请使用分支命令上的--no-merged标志。我们再次使用-r标志来比较遥控器。
以下将比较当前签出的分支(即HEAD)与默认远程。
gitbranch-r--no-merged
要查找哪些分支尚未与分支合并,请像这样指定。
gitbranch-r--no-mergedorigin/master
这将再次打印出一个分支列表。
找到分支后,我建议使用GUI工具检查分支的历史记录以及对其所做的任何提交。Sourcetree和GitKraken之类的工具是这样做的好方法。可以通过命令行来做到这一点,但我发现这样很容易遗漏一些东西。
一旦做出决定,就该删除分支了。
删除远程分支
要删除本地分支,请使用此命令。
gitbranch-dfeature-1
不能使用branch命令删除远程分支。因此,要删除远程分支,只需运行push命令,指定应删除哪个分支。
gitpushorigin--deletefeature-1