Vì lợi ích của một thí nghiệm, cho phép nói bạn git log
xác định như sau cam kếtSHA-1 của các cam kết được tính toán chỉ dựa trên nội dung của cây?
commit 16bc8486fb34cf9a6faf0f7df606ae72ad9ea438 // added 2nd file
commit 9188f9a25b045f130b08888bc3f638099fa7f212 // initial commit
Sau khi cam kết, .git/refs/heads/master
điểm để 16bc8486fb34cf9a6faf0f7df606ae72ad9ea438.
Hãy nói rằng, sau này, tôi tự chỉnh sửa file .git/refs/heads/master
để trỏ đến 9188f9a25b045f130b08888bc3f638099fa7f212
Tại thời điểm này, tình trạng git nhận ra rằng một tập tin không bị giam mới là cần được chăm sóc. Đây là cùng một tệp mà lần commit thứ hai của tôi xử lý trước đây.
Nếu tôi cam kết nó .. git log
hiện nay cho thấy
commit b317f67686f9e6ab1eaabf47073b401d677205d5 // 2nd file committed for the 2nd time
commit 9188f9a25b045f130b08888bc3f638099fa7f212 // initial commit
Câu hỏi 1:
Bạn sẽ nhận thấy rằng SHA
băm khác nhau giữa lần đầu tiên tôi cam kết một tập tin thứ hai và hiện nay. Tại sao vậy? Nội dung của tệp không thay đổi, nó vẫn là tệp chính xác.
Câu hỏi 2
Tại thời điểm này, những gì đã xảy ra với bản gốc thứ hai cam kết? Khi tôi làm git show 16bc8486
, nó cho thấy cam kết này. Tuy nhiên, nó không hiển thị trong lịch sử git log
.
Đọc thú vị: http://book.git-scm.com/1_the_git_object_model.html – Mat