事实上,我发现了一些有趣的事情。我修改了对现有本地提交的更改。我知道将更改原始提交的哈希 - 至少这是我的想法。但似乎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
,而是回溯到原来的提交。
我只是对这种行为感到好奇并想知道:有没有办法找到原始提交5b122c7
和git log
或其他什么?如果我不知道原始提交的哈希:我怎样才能找到哈希?
答案 0 :(得分:6)
旧提交仍在存储库中,但不再包含在任何分支的历史记录中。因此,5b122c7
最终将被Git的垃圾收集清理干净。
没有直接的方法来发现原始提交,只给出新修改的提交的哈希值。修改提交本质上是丢弃旧提交并创建一个新提交。它们之间没有联系。
在修改提交的存储库中,git reflog
命令将显示旧提交的哈希值。但是,如果他们要克隆您的存储库,这不是其他人会看到的一部分。