我的任务是确保我们的主分支定期合并到我们的开发人员分支中。
我们的结构是这样的。我们有4个存储库,在每个存储库中,我们都有一个主分支,以及大约5-10个开发人员分支,这些分支在任何给定的时间都在工作。开发人员分支可以在一天到三个月之间活动,并且分支的名称永远不会重复。
每周一次,我需要检查所有开发人员分支以及主分支,并跟踪哪些分支已经合并,哪些分支没有合并,以及它们的最后一次合并是什么时候进行的。
我目前正在通过使用SmartGit和切换到分支,以及检查日志等方式来实现这一点,但是我想让这个过程更快,甚至可能是自动化的。
有工具可以这样做吗?我可以写一个bat脚本来完成这个任务吗?
看看其他与git相关的问题,我发现我可能会使用
git show :/"Merge branch 'master'"和
git log --pretty=format但我一定是错过了一些东西,这将使这比目前的手工方法更快和更容易。
编辑:
到目前为止,答案是非常有希望的,这使我想加两条皱纹。
发布于 2014-01-07 14:14:24
一个简单的工作流更改是将--all选项用于git log。
这将导致存储库中所有分支的日志条目都包含在日志中。将此与您可能需要的任何其他选项相结合,您的日志挖掘将从~30 (每个分支一个)减少到4个(每个存储库一个)。
根据您的需要,您可能会发现这些其他选项很有用:
git log --all --graph --decorate有些人也喜欢使用--oneline,但我不喜欢它。我发现没有它的可视化更容易查看,但是两种方法都进行了实验。
您还可能希望研究git log master..<branch-name>,这将显示来自<branch-name>的提交是可从master访问的,而提交是无法从master访问的。这实际上是您正在寻找的提交列表。这可能是通过脚本从每个分支生成一个列表。
accepted answer from this question将详细介绍如何使用git for-each-ref通过脚本遍历分支。
发布于 2014-01-07 14:14:32
这些能帮到你吗?
# view the branches that have been merged already
git branch --merged
# view the branches that have NOT been merged yet
git branch --no-merged发布于 2014-01-07 14:22:07
git log可以用来列出一个分支中存在的提交,而不是另一个分支中的提交。例如,
git log developer..master显示提交已到达主分支,但未到达开发人员分支和
git log master..developer自然会做相反的事情。您可以将其与各种格式选项结合起来,以生成您喜欢的报表。
要了解开发人员分支何时从主分支更新,可以使用git merge-base,它查找两个分支都常见的最新提交。请注意,如果最近的合并是从一个开发人员到另一个开发人员,而不是相反,那么这种提交可能在开发人员分支上,但是如果您只合并一次(在开发人员分支的生命周期结束时),这应该不是问题。
https://stackoverflow.com/questions/20968915
复制相似问题