我很困惑地看到我的同事 Alice 在 git 日志中进行了合并提交,Bob 向我保证确实是他进行了合并。我没有看到鲍勃的其他合并提交,所以看起来爱丽丝以某种方式设法接管了鲍勃的提交。
Alice 确实也提交了一些东西,但她的提交活动很可能是在 Bob 之后的。Alice 仅通过 Visual Studio 的 git ui 使用 git。
我知道可以通过变基操作重写本地提交,但据我了解,通常不会对已推送的提交执行此操作。我认为图形化的 git ui 不会做任何不寻常的事情。
那么为什么我在 git 日志中看到 Alice 是作者和提交者呢?可能发生了什么原因导致这种情况?
编辑:其他提交有明智的作者,所以这不仅仅是配置了错误的用户名。
每个提交对象都带有两个字段:作者和提交者。您可以使用命令行git cat-file -p操作检查原始提交对象。例如:
$ git cat-file -p 83232e38648b51abbcbdb56c94632b6906cc85a6 | sed 's/@/ /'\ntree 894962f72d565687c409f018060fdefa20e5f3fe\nparent aa8c8d914e4ae709e4fd025f359594f62653d9e5\nauthor Junio C Hamano <gitster pobox.com> 1556175832 +0900\ncommitter Junio C Hamano <gitster pobox.com> 1556178085 +0900\n\nThe seventh batch\n\nSigned-off-by: Junio C Hamano <gitster pobox.com>\nRun Code Online (Sandbox Code Playgroud)\n一旦提交,就无法更改:在本例中,提交的哈希 ID是提交内容83232e38648b51abbcbdb56c94632b6906cc85a6的加密校验和。如果我获取此文本,更改名称,并根据结果进行新的提交,我将获得不同的提交哈希 ID。
现在,我可以做到这一点,完成后,我可以将所有直接下游提交\xe2\x80\x94的所有子项83232e38648b51abbcbdb56c94632b6906cc85a6\xe2\x80\x94复制到以我的新提交作为其父级的新的和不同的提交( )。然后我必须复制这些提交的子项,以及它们的子项的子项,等等,所有这些都是为了让您相信我的副本83232e38648b51abbcbdb56c94632b6906cc85a6是您应该使用的副本。如果此复制链中有任何签名的提交或签名的带注释的标签,除非我有 Junio Hamano 的签名密钥,否则我将无法正确签名它们。所以你也许能够看出我做了这个\xe2\x80\x94,即使没有任何签名密钥,你可能仍然能够看出,因为我向你提供的 Git 存储库以及这些复制的替换,与您之前拿到的包含原件的副本不匹配。
因此,事实上合并上有 Alice 的名字\xe2\x80\x94 假设你的 GUI 没有对你撒谎\xe2\x80\x94 意味着合并上有 Alice 的名字。这并不意味着 Alice确实做到了,因为 Bob 可以将他的 Git 设置为在 Bob 进行合并期间声称自己是 Alice。如果您想验证谁进行了提交,您还需要某种数字签名,无论是在提交上还是在带注释的标签上。(对每个提交进行签名是一件很痛苦的事情,这就是为什么 Git 开发人员只对带注释的标签进行签名。)
\n为什么以及如何发生这种情况我们无法猜测。当鲍勃说他这样做不是恶作剧时,你是否相信他取决于你。你必须观察它的实际发生并从那里进行调查。
\n| 归档时间: |
|
| 查看次数: |
918 次 |
| 最近记录: |