如何使用git获取所有分支与某人的提交?

时间:2016-11-28 10:30:58

标签: git git-bash

如何获取上个月有人提交的所有分支的名称?

5 个答案:

答案 0 :(得分:1)

那就够了:age?它还显示了潜在的远程分支。 git branch -av代表全部,-a代表详细信息。有关详细信息,请参阅here

修改:我认为answer可以更好地概述其他可能性。但是,未跟踪branch creator。根据问题,-v可能很有趣......

答案 1 :(得分:1)

您可以使用" - 自" git log选项,用于选择上个月的提交:

git log --since="`date -d'1 month ago'`"

然后,对于每个修订版,您都可以使用" git branch --contains"显示它所在的分支。例如:

git branch --contains 00735a997d0bba684dbf62552eea83b9491ac26b

您可以将所有这些放在一行中,这将为您完成所有操作并重复删除输出:

git log --since="`date -d'1 month ago'`" --format="%H" | while read i; do git branch --contains $i; done | sort -u

答案 2 :(得分:1)

实际上这是不可能的。

您可以找到包含用户的哪些分支提交,这些提交具有上个月内的作者日期或者具有上个月内的提交日期。两者都可能不太准确。

你不能做的是确定在Git中提交了哪个分支。分支只是一个提交的便利贴,如果检出分支,它会自动转到下一个提交。但是你可以随意剥离它并将它放在你喜欢的任何地方。因此,您无法确定提交的分支是什么,因为提交和作者日期可以任意设置,您甚至无法可靠地使用这些日期。

如果您有严格的提交政策并且所有人都遵守这些政策,您可以做这样的事情。

答案 3 :(得分:1)

免责声明:这不是一个完整的答案,只是一个想法。

在实际答案之前有一点技术背景。

Git分支只是一个提交指针。它可以从一个历史分支更改为另一个历史分支,除了分支的reflog中的条目(如果已启用),分支的移动不会在存储库中留下任何痕迹。

为了说清楚,让我们说回购看起来像这样:

               +-- branch X
               v
A -- B -- C -- D 
       \
        - E -- F
               ^
               +-- branch Y

这个简单的命令序列:

git checkout X
git reset --hard F
git checkout Y
git reset --hard D

使分支XY交换位置。现在存储库看起来像这样:

               +-- branch Y
               v
A -- B -- C -- D 
       \
        - E -- F
               ^
               +-- branch X

例如,提交E现在属于分支X,无法从分支Y到达,但它属于分支Y(并且不能在创建时从分支X到达。

这使您的问题无法确定。

答案

要使用的命令是git log,其中包含一些参数:

  

--since=<date>
  --after=<date>

     

显示比特定日期更近的提交。

     

--until=<date>
  --before=<date>

     

显示超过特定日期的提交。

     

--author=<pattern>
  --committer=<pattern>

     

将提交输出限制为具有与指定模式(正则表达式)匹配的作者/提交者标题行的输出。

     

--all

     

假设refs/中的所有引用都在命令行中列为<commit>

     

--walk-reflogs

     

不要走出提交祖先链,而是将最新的条目从最新的条目转移到较旧的条目链。

命令行应该是这样的:

git log --since='1 month ago' --author=john.doe@example.org --all 

您可以在--author参数中输入作者的完整名称或电子邮件地址,或只是其中的一部分。

--all告诉git log使用所有当前分支搜索可访问的提交

如果您将--walk-reflogs添加到命令行并将--all替换为特定分支名称(此答案的第一部分示例中的fe Y),Git会跟随此移动Y分支的历史记录(记录在reflog中)并返回提交FEBA。如果没有--walk-reflogs Git,则可以访问从分支Y的当前位置访问的提交,并返回提交DCBA(假设它们都符合其他条件)。

请注意,添加--walk-reflogs可能会返回不完整的结果,也不会返回任何内容。分支reference log包含分支的移动(因为commitresetrebase和其他命令)仅限本地存储库,它可以被禁用或清除

答案 4 :(得分:0)

您可以使用since&amp; untill标志以查看日期范围的提交。并使用author标志来过滤某人的提交。

$ git log --since=2.month.ago --until=1.month.ago --author=<user>    # relative time
$ git log --since=2000-01-01 --until=2012-12-21 --author=<user>      # absolute

然后,如果您想知道哪个分支包含特定提交。

$ git branch --contains <commit-sha>          # show the branch list(s) containing the commit