其实在一次偶然中我发现了一些有趣的东西。我修改了对现有本地提交的更改。我知道这会改变原始提交的散列 - 至少我是这么想的。但是 git 似乎创建了一个全新的提交。到目前为止没问题。
$ vim foo
$ git add foo
$ git commit -m "Edited Foo"
$ git log --oneline -n 1
5b122c7 Edited Foo
$ vim foo
$ git add foo
$ git commit --amend
$ git log --oneline -n 1
98f1e64 Edited Foo
$ git show 5b122c7 # wait what?
git show 5b122c7
将显示原始提交 - 因此修改后的提交实际上是一个新提交。
但是为什么旧的提交还在版本库中呢?好的,让原始提交返回可能很整洁。
但原始提交 5b122c7
甚至没有出现在 git log --all
此外,git revert 5b122c7
不会回退到 5b122c7
,而是回退到我原来的上一次提交。
我只是对这种行为感到好奇并且想知道:有没有办法通过 git log
或其他方式找到原始提交 5b122c7
?如果我不知道原始提交的哈希值:如何找到哈希值?
最佳答案
旧的提交仍在版本库中,但不再包含在任何分支的历史记录中。因此,5b122c7
最终会被 Git 的垃圾收集器清理掉。
没有直接的方法来发现原始提交,只给出新修改提交的哈希值。修改提交实质上是丢弃旧的并创建新的。它们之间没有联系。
在您修改提交的存储库中,git reflog
命令将显示旧提交的哈希值。但是,这不是其他人在克隆您的存储库时会看到的内容的一部分。
关于git - 如何找到修改后的原始提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32194308/