为了实验起见,假设您的git log
标识了以下提交
commit 16bc8486fb34cf9a6faf0f7df606ae72ad9ea438 // added 2nd file
commit 9188f9a25b045f130b08888bc3f638099fa7f212 // initial commit
提交后,
.git/refs/heads/master
指向16bc8486fb34cf9a6faf0f7df606ae72ad9ea438。假设在此之后,我手动编辑
.git/refs/heads/master
文件以指向9188f9a25b045f130b08888bc3f638099fa7f212在这一点上,git status识别出一个新的未提交文件需要引起注意。这是我的第二次提交之前处理过的同一文件。
如果我确实提交它..
git log
现在显示commit b317f67686f9e6ab1eaabf47073b401d677205d5 // 2nd file committed for the 2nd time
commit 9188f9a25b045f130b08888bc3f638099fa7f212 // initial commit
问题1:
您会注意到,我第一次提交第二个文件和现在的
SHA
哈希值是不同的。这是为什么?文件的内容没有改变,仍然是相同的文件。问题2
此时,最初的第二次提交发生了什么?当我执行
git show 16bc8486
时,它显示此提交。但是,它不会显示在git log
历史记录中。 最佳答案
问题1:因为哈希是在考虑到所有因素之后生成的,包括提交元数据(其本身包含日期和时间)。
问题2:git log
显示当前分支的日志。提交16bc8486
不属于其中。据我所知(我不确定),垃圾收集器迟早会删除它,如果它发现没有引用它的东西(git gc --help
)。
关于git - 是否仅根据树的内容计算提交的SHA-1?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8873169/