【问题标题】:GitHub: a changed introduced without a commit, or a commit is lost without any traceGitHub:在没有提交的情况下引入了更改,或者提交丢失了没有任何痕迹
【发布时间】:2022-07-06 02:43:16
【问题描述】:

我在 GitHub 中发现了一个很奇怪的现象。

简而言之,文件中的一行在没有任何提交的情况下被更改。

如果我在历史的给定点浏览存储库,然后在历史的下一个点浏览,我可以看到文件的一行发生了变化。但是当我查看将存储库从第 1 点更改为第 2 点的提交时,该文件中没有任何内容。

之前,我添加了一个提交,只是反过来改变了那行,所以看起来之前的提交就消失了,没有任何痕迹。据我所知,在 git 中,没有提交就无法改变。我错了吗?

不幸的是,repo 是私有的,所以我不能分享它,但这里有一些截图:

详情

显示旧状态和新状态的回购历史记录,以及可能已经消失的提交

在文件Models/Sql.Andris.cs 中,我通过提交将行尾从“50”更改为“250”。然后,经过几次提交,它又改回原来的“50”。请参阅下面的代码。

底部的红色矩形显示将行从“50”更改为“250”的提交

在中间的红色矩形中,“250”仍然存在

在顶部的红色矩形中,“250”变回“50”

最初更改文件的提交

本次提交中没有其他内容。

这是文件Models/Sql.Andris.cs

历史后期的文件

这是同一个文件Models/Sql.Andris.cs

注意:最后一行仍然以250);结尾

下一个历史点的文件

这是同一个文件Models/Sql.Andris.cs

注意:最后一行以50);结尾

将代码从中间提交带到最新提交的提交

请注意,该提交没有来自文件Models/Sql.Andris.cs 的任何内容

问题

这种现象导致我在制药环境中的应用程序出现错误,这意味着我必须向当局解释偏差,并且我必须想出一个解决方案,这样它就不会再次发生。我被卡住了,因为我不明白这怎么会发生,我不知道如何防止它在未来发生。

你知道我在调查期间遗漏了什么可以解释发生了什么吗?

我能做些什么来防止它再次发生吗?

任何提示将不胜感激!

【问题讨论】:

    标签: git github


    【解决方案1】:

    可能发生了什么

    我认为合并导致了问题。当合并两个分支时,会创建一个合并提交。该合并提交有两个父提交(合并在一起的两个分支)。合并后,两个分支的提交都可以在历史记录中找到。

    例如,假设提交是这样的(顶部表示最新):

    X
    |
    M
    |\
    A B
    | |
    C D
    |/
    E
    

    从提交 E,创建了两个提交 C 和 D。后来,这些提交与合并提交 M 合并在一起。X 是在合并之后创建的。

    GitHub 不会在提交历史记录中显示该图表。相反,它只显示提交。如果提交 C 更改了某些内容,可能会发生 B 在 GitHub 中显示在 C 之后,因此 B 不会有更改,但它会重新出现在 X 中。

    换句话说,GitHub 可能会将其显示为(顶部表示最新)

    X
    M
    B
    D
    A
    C
    E
    

    但是 B 和 D 不知道 A 和 C 的变化。

    适应您的存储库

    在您的情况下,合并#67(创建提交27a9506)时可能发生了一些事情,并且合并提交以某种方式没有显示出来。另一种可能性是提交 14ae7b527a9506 来自一个分支,而提交 9d786f2 来自另一个分支,并且这些提交在未来的合并提交中合并。 GitHub 将同时显示两个分支的提交,但“较新”的提交(根据 GitHub)不知道较旧的提交。在这种情况下,更改应该在以后的提交中可见。

    git提供的工具

    Git 提供了可以提供更多洞察力的工具。

    例如,git log --graph 命令会在图表中显示所有提交,以便您了解提交的来源并查看提交的依赖关系。

    另一个有用的命令是git blame。输入git blame <file> 时,它会向您显示该文件中每一行的提交负责。当单击文件顶部的Blame 按钮时,GitHub 还会向您显示。

    这些工具可以帮助您获取有关 git 存储库的信息并诊断此类问题/不明确之处。

    免责声明

    我只是在做假设,因为我看不到您的实际代码/提交。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 2016-06-01
      • 2021-04-28
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多