【问题标题】:Git diff on rewriting history重写历史的 Git diff
【发布时间】:2021-12-09 06:30:24
【问题描述】:

我很想知道这种情况下的 Git diff,我在 Git 文档中找不到

假设在分支 A 上,我有三个提交为
Branch A: Commit 3 <-- Commit 2 <-- Commit 1

Commit 3 是最新的分支。

  1. 现在,如果我们重新编写提交历史记录,即 rebase 最近的 Head~2 提交并将它们压缩为一个,那么分支看起来像

Branch A: Commit 3' <-- Commit 1
Commit 3' 包括变基后的提交 3 和提交 2。

现在如果我运行命令git diff commit3 commit3' 会起作用吗? 如果是,那么为什么会在 diff 中显示什么变化?

  1. 如果我们删除 commit 3 并在变基后将 commit 2 保留为最新的 master。 然后 git diff commit 3 commit 2 会显示什么?

注意:这里的commit 3已经被删除,如果发现diff,git会如何追踪?

【问题讨论】:

  • git diff 比较树,所以是的,它会起作用。使用测试存储库中的一组极简文件进行尝试,您会亲眼看到。

标签: git git-commit git-diff


【解决方案1】:

它会起作用,因为每次提交实际上都是工作存储库当前状态的快照,无论是什么使这个存储库进入这个特定状态。因此,您可以将任何修订版与其他任何修订版进行比较。

如果您只是简单地重新定位以合并您的提交,那么 commit3commit3' 之间应该没有区别,因为它们的最终状态是相同的。

这与“应用更改”不同,例如,cherry-pick 会这样做。在后一种情况下,首先通过将所选提交与其父提交进行比较来获得变更集,然后将差异结果应用于当前工作目录。

【讨论】:

    猜你喜欢
    • 2014-09-25
    • 1970-01-01
    • 2020-05-30
    • 2018-03-20
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    相关资源
    最近更新 更多