【问题标题】:Identify obsolete branches when commits have been squashed当提交被压缩时识别过时的分支
【发布时间】:2012-08-23 23:42:39
【问题描述】:

我们在办公室使用监视器来显示有关我们 git 存储库中所有功能分支的信息。这样做的原因之一是我们知道功能分支何时“过时”(即它们的所有提交都已合并到 master)。我们使用:

git log --pretty=format:'%cd %s' --no-merges --abbrev-commit -n 1 --date=short master..origin/<branch>

最近,我们一直在尝试通过在将功能合并回 master 时压缩提交来保持更清晰的历史记录。缺点是我们当前识别“过时”分支的方法不再有效。

有没有 git 命令可以用来判断一个分支是否可以安全删除?

【问题讨论】:

  • 如果你在 squash 合并中保存自动生成的提交消息,你可以从中检索提交哈希
  • 为什么要使用git merge --squash?一个简单的git merge 将在master 上生成相同的大提交。并且不会危及您的 git logcommand。
  • @VonC 我们这样做只是为了让提交历史更简单。然后每个功能只有一个提交,因此很容易一目了然地看到为实现它所做的工作,如果我们需要删除特定功能,我们可以恢复单个压缩提交。如果人们知道合并后历史会被整理,那么他们在处理分支时更有可能进行小的增量提交。
  • @PirateRob 但是合并总是会在master 上产生 one 提交,所以我不理解这一点。
  • @PirateRob:做git merge --no-ff,你将永远有一个合并提交。使用git log --first-parent,您只会在 master 上直接看到合并提交(没有合并到侧分支中)。此外,始终可以在合并之前以交互方式重新设置(整理)分支

标签: git


【解决方案1】:

以下内容仅适用于尚未被压扁的分支,因此并不直接适用于您的情况。在某些情况下它可能仍然有用。

好吧,你总是可以使用 git branch -d 本身:

git checkout master
git branch -d <branch>

-d 标志拒绝删除尚未合并到HEAD 的分支,在本例中为master。我实际上将它用于cleanup-branches alias,它只是删除了我的存储库中已经在我们的生产代码库中的任何功能分支:

git config --global alias.cleanup-branches \
    '!git branch | grep -v "\*" | awk "{ print $1 }" | xargs git branch -d'

我想出于您的目的,您可以在规范存储库上执行此命令。剩下的任何分支都处于活动状态并正在开发中。

【讨论】:

  • 但是git branch -d &lt;branch&gt; 在你认为 没有合并到 HEAD 中的情况下压缩提交将不起作用。
  • @PirateRob 啊,是的。我错过了那一点。我将删除此答案,因为它不适用。
  • 或者只是留下警告,因为删除这些东西有点痛苦。
猜你喜欢
  • 2020-10-24
  • 2012-11-20
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 2014-05-02
  • 2014-10-10
  • 2019-03-16
  • 2014-03-23
相关资源
最近更新 更多