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

标签 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,而是回退到我原来的上一次提交。

我只是对这种行为感到好奇并且想知道:有没有办法通过 git log 或其他方式找到原始提交 5b122c7?如果我不知道原始提交的哈希值:如何找到哈希值?

最佳答案

旧的提交仍在版本库中,但不再包含在任何分支的历史记录中。因此,5b122c7 最终会被 Git 的垃圾收集器清理掉。

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

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

关于git - 如何找到修改后的原始提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32194308/

相关文章:

windows - 当 git 从 Windows 机器推送 http 时自动输入用户名/密码

git - 如何重置 "local"git 存储库?

git - 如何找出哪些 Git 分支影响给定的子目录?

java - Netbeans 中带有 git 的版本号

git - 无法从git中删除符号链接(symbolic link)

Git GUI推送到特定分支

git - 更改远程分支的本地引用

git - 如何为同一分支中的每个提交发出单独的 pull 请求?

git - 制作我自己的框架并将其用作项目的上游

git - 远程git repo和svn之间无休止的冲突