Mục lục

Git Mental Model: Đừng coi Git là công cụ sao lưu

Hiểu bản chất của Git dưới dạng Snapshot thay vì Diff. Khám phá 3 vùng lưu trữ quan trọng: Working Directory, Staging Area và Repository.

Hầu hết mọi người học Git theo cách "học vẹt": gõ add, commit, push. Nhưng khi gặp lỗi, họ hoảng loạn vì không hiểu phía dưới "nắp capo" Git đang làm gì.

1. Git là "Snapshot", không phải "Diff"

Các hệ thống cũ (như SVN) lưu trữ dữ liệu dưới dạng Diff (những thay đổi giữa các phiên bản). Git thì khác. Mỗi lần bạn commit, Git coi đó là một Snapshot (bức ảnh chụp toàn bộ dự án) tại thời điểm đó. Nếu một file không đổi, Git chỉ lưu một liên kết (link) tới file cũ chứ không copy lại.

Lợi ích: Việc quay lại lịch sử cực kỳ nhanh vì Git không phải "tính toán" cộng trừ các file để tìm ra trạng thái cũ.

2. Luồng dữ liệu: 3 Vùng quan trọng

Hiểu về 3 vùng này giúp bạn làm chủ được git add và lý do tại sao commit lại trống.

  1. Working Directory: Thư mục bạn đang mở code và sửa. (Trạng thái: Untracked/Modified).
  2. Staging Area (Index): Nơi "gom" hàng. Bạn chuẩn bị những gì sẽ có trong commit tiếp theo. (Dùng git add).
  3. Local Repository (HEAD): Nơi các commit đã được lưu chính thức vào lịch sử máy của bạn. (Dùng git commit).

3. Bản chất của Branch (Nhánh)

Trong Git, một branch thực chất chỉ là một con trỏ (pointer) siêu nhẹ trỏ đến một commit cụ thể. Việc tạo branch mới chỉ đơn giản là tạo thêm một cái "nhãn" dán vào commit hiện tại.

Đó là lý do tại sao Git tạo branch và chuyển branch cực nhanh so với các công cụ khác.

4. Hash (SHA-1): Cân bằng dữ liệu

Mọi thứ trong Git đều được định danh bằng mã Hash (một chuỗi 40 ký tự).

  • Nếu nội dung file không đổi -> Hash không đổi -> Git biết ngay file đó đã có sẵn.
  • Hash đảm bảo tính toàn vẹn: Bạn không thể sửa bất cứ thứ gì trong lịch sử mà mã Hash không thay đổi.

Kết luận

  • Git không lưu "thay đổi", Git lưu "trạng thái".
  • Luôn kiểm tra xem mình đang ở vùng nào (git status).
  • Branch chỉ là một cái tên, đừng quá thần thánh hóa nó.

Hiểu được mô hình này, bạn sẽ thấy các lệnh như rebase hay reset trở nên vô cùng dễ hiểu.

Quảng cáo
mdhorizontal