【问题标题】:How to list git tags containing commit that was cherry-picked如何列出包含精心挑选的提交的 git 标签
【发布时间】:2019-04-04 20:08:26
【问题描述】:

我正在尝试找出如何列出包含给定提交的所有标签,包括那些被精心挑选的标签。

例如:

  • 我有一个提交abcd1234,已合并到master 分支中。
  • 这给了我一个 合并提交 哈希 a1b2c3d4
  • 此时我创建了一个名为 release-1.0 的标签

此时,我可以使用git tag --contains abcd1234git tag --contains a1b2c3d4。这两个命令都会列出标签 release-1.0

现在:

  • 我从 release-1.0 标签创建了一个热修复分支
  • 我在主服务器上有一个新的合并提交,哈希值为xyz789
  • 我将这个提交精心挑选到 hot-fix 分支
  • 我将此 hot-fix 分支标记为 release-1.1 并删除该分支

如何获取包含提交xyz789 的所有标签的列表?在这种情况下,它应该显示此提交在以下位置可用:

  • 发布-1.1

【问题讨论】:

  • 你到底为什么要挑选一个提交到你要删除的分支上?然后是合并提交(没有更改)?也许描述你试图通过最后两个步骤实现的目标,当你在 master 中合并 hot-fix 并用 1.1 标签标记你的 xyz789 提交之后就可以完成。
  • “热修复”分支一旦发布就不需要保留。另外,release-2.0 出来的时候会不一样。选择cherry-pick-merge-commit 的原因是因为工作流涉及在将更改合并到master 时创建合并提交。因此,当某些“合并请求”需要作为热修复发布时,合并提交会被挑选到热修复分支中。

标签: git tags git-commit git-cherry


【解决方案1】:

这里的问题是release-1.1 包含提交xyz789(这也不是有效的哈希ID,但不要介意:-))。 Cherry-picking 创建一个新的、不同的提交,具有一个新的、不同的哈希 ID。

而不是试图跟踪哪些提交是哪些其他提交的副本——这是可能的;参见-xgit cherry-pick 的参数——最好将热修复提交应用为一个分支,无论是否是临时的,它是在问题首次出现的提交之后立即创建的。然后可以将此提交合并到多个不同的分支。请参阅 What are the perils of cherry picking in git between two branches A and B if I am never going to merge between them? 并点击 Raymond Chen 博客文章的链接。

【讨论】:

  • 你说得对,樱桃采摘会创建一个新的提交。为了简单起见,我没有在帖子中提及它。就我而言,git cherry-pick -x 已被使用。它将该行附加到消息中以指定从哪里挑选出来的。但是,如果我想跟踪“原始”提交(在本例中为 xyz789)的位置,我不知道找到该信息的直接方法。
  • git branch --contains 将显示 master 包含它,因为您将它合并到 master 中。
  • 没错,但问题是哪个版本包含来自提交 xyz789 的更改。 master 始终处于开发阶段,所有修复和功能都将存在于 master 中。
猜你喜欢
  • 2014-10-04
  • 2012-04-08
  • 2011-12-16
  • 2018-01-18
  • 2012-07-28
  • 2021-03-15
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
相关资源
最近更新 更多