Cách git ghi nhớ file nào sẽ commit?

Chào các bạn: muốn hỏi một câu hỏi về Git.

Ngữ cảnh: Trong Git, cứ mỗi khi ta Git add một file nào đó, trong folder .git/objects/ sẽ tạo ra một folder chứa một git object gọi là blob, tên của blob này là hash (sha-1) của nội dung của file + một số meta-data khác. Đồng thời khi git add file thì tên file sẽ được đưa vào một file trong .git folder là index file (hay còn gọi là staging area) để chuẩn bị cho việc commit.
Em có thao tác:
git ls-files -s (in ra tất cả các blob (in ra mã hash của blob) của các file đã được commit và các file đang ở trong staging area để chờ commit).

Câu hỏi của em là: git làm sao nó biết được những blob nào cần in ra (dĩ nhiên những blob của các file đã commit thì nó biết ngay), nhưng những file mới ở trong staging area, tức là mới chỉ có tên trong index file, làm sao nó biết được ạ. Trong folder .git/objects/ có cả đống blob, không lẽ cứ mỗi tên file trong index file (staging area) nó phải duyệt qua hết đống blob trong .git/objects ạ. Như vậy em thấy không hợp lí lắm.
Em google hết rồi nhưng không thể tìm được câu trả lời. Mong anh chị xem giúp em. Em cảm ơn.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?