Object database, refs và reflog
Commit là snapshot có metadata và parent; branch chỉ là ref di chuyển tới một commit.
Bốn loại object
Blob chứa bytes, không chứa tên file. Tree ánh xạ tên và mode tới blob/tree. Commit trỏ tree gốc, parent(s), author/committer và message. Annotated tag là object có tagger, message và có thể có chữ ký. Object ID là hash của type, length và content; cùng nội dung tạo cùng blob.
Refs và HEAD
refs/heads/*, refs/tags/*, remote-tracking refs và special refs là tên dễ nhớ trỏ object ID. Symbolic HEAD thường trỏ branch; detached HEAD trỏ commit trực tiếp. Ref update dùng lock/transaction để tránh ghi đè cạnh tranh.
Reachability và reflog
Object reachable nếu đi từ root như ref qua commit/tree. Reflog là nhật ký thay đổi ref cục bộ, không được push; nó thường cứu commit sau reset/rebase nhưng có expiry. Vì vậy reflog là recovery window, không phải backup.