【问题标题】:how to verify that a patch reverts another without cherry-picking?如何验证一个补丁在没有挑选樱桃的情况下恢复另一个补丁?
【发布时间】:2017-03-07 23:53:54
【问题描述】:

我有 2 个提交:A 和 B。据说 B 会还原 A。即假设 B 是使用“git revert A”创建的

为了验证上述内容,我可以:

  1. git checkout A
  2. git cherry-pick B
  3. git diff A~1(应该返回0行差异)

有没有 diff 工具可以在不使用 git 的情况下做同样的事情?

提前谢谢你。

【问题讨论】:

  • 通过检查很明显。如果某个变更集 C 将初始输入状态 I 修改为输出状态 O,则还原变更集是 -C,因为它将输出状态 O 修改为输入状态 I。换句话说,如果 C 说“添加文件 F1,删除文件 F2,删除 F3 的第 12 行”,那么 -C 说“删除文件 F1,添加文件 F2,将F3" 后排第 12 行。
  • 顺便说一句,你说你有两个补丁 A和B,但是你说git checkout A和git cherry-pick B,这意味着A和B是两个提交 ID。这些不是一回事。你有哪些,提交 ID 或补丁?
  • 做一个真正的樱桃采摘不是更明显吗?如果您之后不需要cherry-pick 所做的提交,只需运行git reset HEAD^ --hard。
  • @torek 我正在使用来自上游来源的提交 ID(我编辑了问题)。提交的大小各不相同,有些可能会更改数十个文件。我正在尝试编写一个工具来验证这些还原,然后再将它们应用到我们的下游存储库。谢谢。
  • @ElpieKay 谢谢,是的,这是我目前的计划,但我正在探索是否有其他选择。

标签: git diff patch revert


【解决方案1】:

你可以生成一个diff from those commits(那部分仍然需要 Git)

git format-patch -1 A
git format-patch -1 B

所以你仍然需要 Git 来提取一些东西来检查。

然后您可以使用patchutils 中的combinediff 来查看组合是否导致空补丁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2014-09-21
    • 1970-01-01
    • 2014-04-08
    相关资源
    最近更新 更多