如何在通过拉取请求合并之后删除本地分支?git-flow,bitbucket,sourcetree

6

我本地的环境:

  • Git 连接到 Bitbucket
  • Sourcetree 使用 git-flow

步骤:

  1. 我在 Sourcetree 中创建一个名为 feature x 的分支,然后添加代码。
  2. 我进行提交 (commit) 操作,包含选项 create a pull requestpush 更改到远程的 feature x 分支。
  3. pull request 中,我选择选项 Close {branch} after the pull request is merged
  4. Bitbucket 团队中的成员审批了 pull request 后将其合并到 develop 分支上。
  5. 我从我的本地 develop 分支中 pull 获取新更改。

注意: 在合并到 develop 之前,通过 pull request 审查代码非常重要,所以问题是:

是否有办法在从 develop 中进行 pull 操作后自动删除本地的 feature x 分支?

*我尝试使用 fetch 但不起作用。


你想要解决什么问题?是因为 git branch 输出中包含了太多已经过时的分支?还是因为仓库大小?或者其他原因?在 Git 中,分支(尤其是已合并的分支)几乎不会占用任何空间。 - Romain Valeri
有时我们会有100多个旧分支的项目,因此,我希望尽可能地保持我的本地环境有条理,所以我正在寻找最好的自动化方法,我说得清楚吗? - e-israel
但是,如果项目本身有许多分支,那么克隆它并在其上工作的人将不会有太多本地分支,只有他们在本地积极检出的分支。即使如此,这只是清除分支列表输出的问题(如果我理解正确,您所说的“有组织”)。 - Romain Valeri
是的,你说得对,一般来说,我想要自动删除我的本地旧的 branch-features,在6个月后它们可能会增长到100-120。感谢你的帮助。 - e-israel
2个回答

5

处理这个问题的一种简单非自动化方法是定期在您的本地仓库中运行分支清理命令,例如:

# to be executed with your "main" stable branch checked out
git branch -d $(git branch --merged)

这将删除每个已合并的本地分支(即那些没有“尚未合并”提交的分支)。因此,所有已通过拉取请求合并的分支都将被删除,但是那些具有最近提交(未审核/未合并)的少数分支不会被删除。

注意:如果您的策略是在拉取请求时压缩提交,那么这将不是一个适合的解决方案,因为您的本地分支仍然具有原始(预压缩)提交,因此它们不会被视为已合并并且不会被删除。


谢谢,我会尝试那个命令,也许将其添加到cron作业中会很有用。 - e-israel

3

类似的问题已经在其他地方提出,有许多有用的答案。关键是要找到所有标记为“gone”的远程分支,然后在本地删除它们。

简短回答

这只是列出要删除的所有本地分支:

git branch -vv | grep ': gone]' | grep -v "\*" | awk '{ print $1; }'

要删除它们,只需添加git branch -D

git branch -vv | grep ': gone]' | grep -v "\*" | awk '{ print $1; }' | xargs -r git branch -D

注意:你应该已经在master上并获取了本地仓库。你可以在之前运行它:

git checkout master && git fetch -p && git branch -vv | grep ': gone]' | grep -v "\*" | awk '{ print $1; }' | xargs -r git branch -D

别名

你也可以为此创建自己的别名:

git config --global alias.delete-gone-branches "! git branch -vv | grep ': gone]' | grep -v \"*\" | awk '{ print \$1; }' | xargs -r git branch -D"

然后只需运行git delete-gone-branches

来源

在OP的情况下,请使用“develop”代替“master”。 - CraZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接