2012-08-29 50 views
2

我们在我们的办公室中使用监视器来显示有关我们的git存储库上所有功能分支的信息。其中一个原因是,我们知道特性分支何时“过时”(即,它们的所有提交已合并到主模块)。我们使用:在提交已被压扁时识别过时的分支

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

最近我们一直在试图通过合并功能时回挤压提交,以保持清洁的历史。缺点是我们目前识别“过时”分支的方法不再有效。

是否有我们可以用来确定分支是否可以安全删除的git命令?

+0

如果在压缩合并中保存自动生成的提交消息,您可以从中提取哈希提交 – galadog

+0

为什么要使用'git merge --squash'?一个简单的'git merge'将在'master'上产生相同的大提交。并且不会危害你的'git log'命令。 – VonC

+0

@VonC我们只是为了保持提交历史更简单。那么每个功能只有一个提交,因此一眼就可以很容易地看到实现它的过程,如果我们需要删除特定功能,我们可以恢复单个被压缩的提交。如果在分支上工作时,人们更有可能做小增量提交,如果他们知道合并时历史将被整理。 –

回答

0

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

嗯,你总是可以使用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' 

我想你的目的,你可以只在一个规范的仓库cron利用此命令。任何遗留的分支都是活跃的和正在开发的。

+0

但是'git branch -d '将不起作用,因为它认为_ _未合并到_HEAD_中。 –

+0

@PirateRob啊是的。我错过了那一点。我将删除这个答案,因为它不适用。 – Christopher

+0

或者只是让它一个人留下警告,因为删除这些东西是一种痛苦。 – Christopher