【问题标题】:When was a file introduced into a given Git branch?什么时候将文件引入给定的 Git 分支?
【发布时间】:2015-03-11 18:34:03
【问题描述】:

我们使用 Git 和 Github。我们有两个主要分支,staging 和 production。当一个新项目/功能分配给开发人员时,他们会创建一个新分支,将其从 production 称为 feature-branch,进行更改、提交、推送到 GitHub,然后使用 GitHub 将 feature-branch 与 staging 合并。当该功能准备好上线时,开发人员随后使用 GitHub 将 feature-branch 与 production 合并。所有合并都添加一个merge 提交。

发生的情况是,开发人员说他们的 feature-branch 内容在 production 上,并且他们从未执行从 feature-branch 到 production 的合并。可能有人不小心将staging 与production 合并了。

一些开发人员犯了错误,我试图找出它发生的根源,并可能正确地扭转它。我希望有人可以帮助我。

我正在尝试使用 GitHub、Git Bash 和 Git 扩展的组合来找出特定文件在什么时候进入分支。使用 Git Extensions file history 功能,它只显示提交更改的时间,而不一定显示合并到分支中的时间。

我怎样才能做到这一点?我已经搜索并使用了许多策略来查找文件日志,例如在When was a file added to a branch in Git? 找到的git log --pretty=online <branch> -- <file>。

任何额外的帮助将不胜感激。如果您需要更多信息,请告诉我,我很乐意提供。

更新 #1

我忘了提到这一点,这在这种情况下可能很重要。在feature-branch 上,一些更改(change-1 和change-2)被提交并合并到staging 和production。然后开发人员对他的feature-branch 进行了进一步的更改(changes-3),并且只合并到了staging。虽然production 应该有change-1 和change-2 而不是change-3,但我如何才能知道changes-3 是在什么时候进入production 的?

【问题讨论】:

  • this 有帮助吗?
  • @Zeeker,谢谢。我会调查的。

标签: git github merge git-log


【解决方案1】:

我想要做的 [...] 是找出特定文件在什么时候进入分支。

问题陈述的一个问题是文件可以重命名,如果你只是运行类似的东西

git log --pretty=online <branch> -- <file>

仅列出相关文件称为&lt;file&gt; 的提交。但是,名为--follow 的git log 标志就在您的小巷里;见git-log man page:

--follow

继续列出重命名后的文件历史记录(仅适用于单个 文件)。

你想跑的地方

git log --reverse --follow <branch> -- <file-in-question>

顶部的日志条目将对应于出现&lt;file-in-question&gt; 的最旧(按时间顺序)提交。如果您想获得出现&lt;file-in-question&gt; 的最旧(在拓扑意义上)提交,则需要在上面的命令中添加--topo-order 标志。

【讨论】:

  • 感谢您对--follow 参数的启发。但是,最后一次提交似乎不是将文件引入分支的提交。关于文件重命名情况的好消息。上面命令给出的提交是文件被重命名的提交。我刚刚意识到我遗漏了一条信息并将其添加为上面的update#1。它可能会有所作为。
【解决方案2】:

git blame &lt;filename&gt; 将为您提供带有提交 ID 和提交者名称和日期时间的文件的逐行详细信息。

【讨论】:

  • 谢谢。但是,这仅显示每行提交的提交。我试图找出提交 bdc45b 何时被合并到 production 分支中。
猜你喜欢
  • 2010-11-14
  • 2011-07-16
  • 2018-12-22
  • 2012-10-23
  • 2016-07-21
  • 2012-03-26
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多