如何找到修改后的原始提交?

时间:2015-08-25 01:44:19

标签: git

事实上,我发现了一些有趣的事情。我修改了对现有本地提交的更改。我知道将更改原始提交的哈希 - 至少这是我的想法。但似乎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,而是回溯到原来的提交。

我只是对这种行为感到好奇并想知道:有没有办法找到原始提交5b122c7git log或其他什么?如果我不知道原始提交的哈希:我怎样才能找到哈希?

1 个答案:

答案 0 :(得分:6)

旧提交仍在存储库中,但不再包含在任何分支的历史记录中。因此,5b122c7最终将被Git的垃圾收集清理干净。

没有直接的方法来发现原始提交,只给出新修改的提交的哈希值。修改提交本质上是丢弃旧提交并创建一个新提交。它们之间没有联系。

在修改提交的存储库中,git reflog命令将显示旧提交的哈希值。但是,如果他们要克隆您的存储库,这不是其他人会看到的一部分。