【问题标题】:Why did the changes of a git commit disappear after other 2 commits (where I did not change the affected file)?为什么 git commit 的更改在其他 2 次提交后消失(我没有更改受影响的文件)?
【发布时间】:2016-02-11 21:42:19
【问题描述】:

我做了什么: 我分离了我的工作分支 MOODLE_27_STABLE 的负责人。然后我创建了一个名为 patterns new 的新分支,使用

检查分离的头部状态
checkout -b patterns_new

然后我在 10 月 20 日更改了文件 db/upgrade.php: Link to this commit, I call it A

然后,2 次提交后突然这些更改在 upgrade.php 中消失了。但是提交并没有提到 db/upgrade.php 甚至被修改了。

在随后的第一次提交之后,db/upgrade.php 仍然没有改变 Link to that commit, B

然后在下一次提交之后,db/upgrade.php 文件突然被旧提交覆盖。 [链接到该提交,C][3]

您可以在提交 C 中看到,查看差异没有任何改变。但是在历史记录的这一点上浏览存储库时,提交 A 被较旧的提交覆盖。 (在第 793 行附近,提交 A 中的添加不再存在) [链接到历史上那个时候的 db/upgrade.php][4]

我用 patterns_new 分支完全替换 MOODLE_27_STABLE 所做的事情(基于 MOODLE_27_STABLE 的分离头后来是:

git checkout patterns_new
git merge -s ours MOODLE_27_STABLE
git checkout MOODLE_27_STABLE
git merge patterns_new

(基于以下教程[用另一个分支完全替换分支][5])

我现在确实担心,这可能不是唯一的提交,它已被覆盖。为什么会发生这种情况,我如何保证 pattern_new 中的所有提交都被“恢复”了?我应该重新挑选它们吗?

(我不得不删除链接 3 到 5,因为由于 stackoverflow 规则“您需要至少 10 个声望才能发布超过 2 个链接),所以我不允许发布更多内容)

【问题讨论】:

    标签: php git commit


    【解决方案1】:

    当您没有签出分支时,您最终基于patterns_new 创建了提交。

    这很好,提交仍然存在,但它们不在那个分支上。您的提交 B,303e50d,是该未命名分支上的最后一个提交,并且是最后一个进行更改的提交。

    您的提交 C 4835b67 具有原始的 patterns_new 提交 dbf4c2863 作为其父级。

    303e50d 上命名一个新分支并将其与您最新更改的位置合并,一切都会好起来的。

    另外,请注意,提交永远不会“覆盖”或以任何方式更改:它们不可能 - 哈希不匹配!您只能在几周后添加新的提交或提交没有分支或标签的垃圾。

    【讨论】:

    • 感谢您的解释。它对我帮助很大,解决了问题。
    猜你喜欢
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 2011-12-04
    • 2011-06-29
    • 2017-11-01
    • 1970-01-01
    • 2015-07-27
    相关资源
    最近更新 更多