gpt4 book ai didi

merge 后 Git 显示错误的作者

转载 作者:行者123 更新时间:2023-12-05 06:26:15 25 4
gpt4 key购买 nike

我很困惑地看到我的同事 Alice 在 git 日志中进行了 merge 提交,Bob 向我保证确实是他进行了 merge 。我没有看到 Bob 的其他 merge 提交,所以看起来 Alice 似乎设法接管了 Bob 的提交。

Alice 确实也提交了一些东西,但她的提交事件很可能在 Bob 之后发生。 Alice 仅通过 Visual Studio 的 git ui 使用 git。

我知道可以通过 rebase 操作重写本地提交,但据我了解,对于已经推送的提交,通常不会这样做。我假设图形化的 git ui 不会做任何异常的事情。

那么为什么我在 git 日志中看到 Alice 是作者和提交者?可能发生了什么导致这种情况?

编辑:其他提交有明智的作者,所以这不仅仅是配置错误的用户名。

最佳答案

每个提交对象都包含作者和提交者这两个字段。您可以使用命令行 git cat-file -p 操作检查原始提交对象。例如:

$ git cat-file -p 83232e38648b51abbcbdb56c94632b6906cc85a6 | sed 's/@/ /'
tree 894962f72d565687c409f018060fdefa20e5f3fe
parent aa8c8d914e4ae709e4fd025f359594f62653d9e5
author Junio C Hamano <gitster pobox.com> 1556175832 +0900
committer Junio C Hamano <gitster pobox.com> 1556178085 +0900

The seventh batch

Signed-off-by: Junio C Hamano <gitster pobox.com>

一旦提交,就无法更改:提交的哈希 ID,在本例中为 83232e38648b51abbcbdb56c94632b6906cc85a6,是提交内容的加密校验和.如果我使用此文本、更改名称并根据结果进行新的提交,我会得到一个不同的提交哈希 ID。

现在,我可以做到这一点,完成之后,我可以复制所有直接的下游提交——83232e38648b51abbcbdb56c94632b6906cc85a6 的所有子提交——到新的和不同的提交以我的新提交作为他们的 parent 。然后我必须复制 那些 提交的 child ,以及他们的 child 的 child ,等等,所有这些都是为了让你相信我的 83232e38648b51abbcbdb56c94632b6906cc85a6 副本是复制你应该使用。如果在此复制的链中有任何签名 提交或签名注释标签,除非我有 Junio Hamano 的签名 key ,否则我将无法正确签名。所以你可能会说这是我做的——即使没有任何签名 key ,你可能仍然能说出来,因为我提供给你的 Git 存储库与这些复制的替代品不匹配您之前拿到的副本,里面有原件。

因此, merge 上有 Alice 的名字这一事实(假设您的 GUI 没有骗您)意味着 merge 上有 Alice 的名字。这并不意味着 Alice 实际上 成功了,因为 Bob 可以将他的 Git 设置为在 Bob 进行 merge 期间声称自己是 Alice。如果您想验证提交者是谁,您还需要某种数字签名,无论是在提交上,还是在带注释的标签上。 (签署每个提交是一件很痛苦的事情,这就是为什么 Git 开发人员只签署他们的注释标签。)

为什么以及如何发生这种情况我们无法猜测。当 Bob 说他不是恶作剧时,是否相信他取决于你。您必须观察实际发生的情况并从那里进行调查。

关于 merge 后 Git 显示错误的作者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56362714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com