【问题标题】:git compare two branches which contains some common commit with different hashgit比较两个分支,其中包含一些具有不同哈希的常见提交
【发布时间】:2018-10-06 16:39:19
【问题描述】:

背景: 我们是一个程序员团队,他们从事具有多个分支的项目 :

Master, Release, Develop

有时我们需要在发布时修复错误,我们需要在开发时报告此修复,以报告我们使用的错误修复:git cherry-pick commit-SHA

使用此命令,错误修复在开发中得到了很好的报告,但提交具有不同的哈希

我们需要什么:

有时我们需要知道尚未报告的提交列表,为此,我们使用比较两个分支的命令,并为我们提供发布中存在但开发中不存在的提交列表:git log develop..origin/release

问题:

此命令比较提交的哈希值,但正如我之前所说,当我们报告我们的提交时,它们的哈希值发生了变化,因此,我们得到一些提交,就好像它们没有被报告一样

我正在寻找一种在不更改提交哈希的情况下报告我们的错误修复的方法,或者一种列出两个分支之间提交差异的方法,不是通过哈希而是基于消息或其他东西

谢谢

【问题讨论】:

  • cherry-pick 不是将提交应用到两个分支的正确方法。阅读此series of articles 以了解为什么cherry-pick 不好以及如何正确地做到这一点。
  • 提交哈希永远不会改变。具有不同哈希的两件事是不同的提交。听起来您正在寻找git patch-id,它计算来自git show 的差异列表的哈希,即变更集的哈希ID,而不是提交的哈希ID。对于“相同”的某些定义,如果两个不同的提交对相同的文件进行相同的更改,它们将生成相同的补丁 ID。
  • 因为这个特定的概念非常有用,Git 有额外的命令来处理补丁 ID:git cherry 为分支集执行此操作,git rev-list--cherry-mark 执行此操作与对称差分操作.他们都在内部使用git patch-id 代码来执行此操作,但如果他们不执行您需要的操作,您可以调用git show <commit> | git patch-id 来计算您自己的补丁ID 并随意使用它们。
  • 话虽如此,请参阅@axiac 的链接以获取更好的方法:只有在陷入可怕情况时才应该使用补丁 ID 进行此操作。

标签: git git-commit git-cherry-pick git-workflow git-worktree


【解决方案1】:
git log --cherry-pick develop...origin/release
  • 分支之间的三个点 ... 表示您要从两个分支中检索不同的提交
  • 来自官方文档 --cherry-pick 选项:

“当提交集受到对称差异的限制时,忽略与“另一端”的另一个提交相同的更改的任何提交。”

【讨论】:

  • --left-only, --right-only 选项对 OP 的任务也很有用
猜你喜欢
  • 1970-01-01
  • 2013-04-20
  • 2013-04-07
  • 2019-11-12
  • 2016-03-11
  • 2015-04-10
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多