Hiểu nhanh Git bằng hình ảnh

tác giả nguyên gốc tiếng Anh: Mark Lodato
Dịch tiếng Việt: Lê Hoạt
Chú giải: cuong@techmaster.vn

Lệnh căn bản Git

Bốn lệnh trên sao chép các tệp tin giữa thư mục làm việc (working directory), vùng chuyển tiếp (stage) - hay còn gọi là chỉ mục (index) và lịch sử (history) (dưới dạng các "commit").

  • git add files sao chép các tệp tin (ở trạng thái hiện tại) tới vùng chuyển tiếp.
     
  • git commit lưu trữ bản ghi của vùng chuyển tiếp thành một "commit".
     
  • git reset -- files bỏ các tệp tin vào khu chuyển tiếp; cụ thể lệnh này sẽ sao chép các tệp tin từ "commit" mới nhất tới khu chuyển tiếp. Sử dụng lệnh này để "huỷ bỏ" (undo) lệnh git add files. Bạn cũng có thể sử dụng lệnh git reset để bỏ mọi thứ vào khu chuyển tiếp.
     
  • git checkout -- files sao chép các tệp tin từ khu chuyển tiếp tới thư mục làm việc. Sử dụng lệnh này để bỏ hết những thay đổi hiện tại ở thư mục làm việc.

Git có 3 tầng lữu trữ

 3 tầng lưu trữ khác nhau:

  1. thư mục làm việc: working directory
  2. vùng chuyển tiếp: staging area
  3. kho git: git repository

Staging Area khó hiểu nhất nên giải thích trước

 Working Area
      +
      |
      v
Staging Area
      +
      |
      v
  .git repo

 

Thanh niên
      +
      |
      v
Quân dự bị
      +
      |
      v
Lính thường trực chuyên nghiệp

 

Sản phẩm đang lắp ráp
      +
      |
      v
Qua kiểm thử
      +
      |
      v
Lưu kho

 

Staging Area ~ vùng chuyển tiếp

  • Nơi lưu tạm thay đổi trước khi những thay đổi này được commit (lưu - chốt hạ) vào git repo
     
  • Chia nhỏ một commit cực khủng (sửa nhiều bug, thêm nhiều chức năng) thành nhiều commit nhỏ. Mỗi commit tập trung vào 1 lỗi, 1 chức năng cụ thể, dễ dàng đảo ngược lại
     
  • Xem xét cẩn thận thay đổi mã nguồn dùng git diff
     
  • Xử lý xung đột và ghép code git merge

Quy ước

Các commit được biểu thị bằng màu xanh có các id là 5 ký tự và chúng trỏ tới commit cha. Các nhánh (branch) được biểu thị bằng màu cam và chúng trỏ tới các commit cụ thể. Nhánh hiện tại được xác định bằng tham chiếu đặc biệt HEAD được "gắn (attached)" vào nhánh đó. Trong hình này, có 5 "commit" mới nhất được hiển thị, trong đó ed489 là commit mới nhất. Nhánh master (nhánh hiện tại) trỏ tới commit này, trong khi đó nhánh maint (một nhánh khác) trỏ tới "commit" tổ tiên (ancestor) của "commit" trên nhánh master

Git Head là commit gần nhất trong nhánh đang làm việc
HEAD is a reference to the last commit in the currently checked-out branch.  

git checkout FixBug

git checkout master

branh đang làm việc (checkout) là FixBug

branh đang làm việc (checkout) là master

git checkout branch nào thì HEAD trỏ đến commit cuối cùng trong branch đó

git diff so sánh khác biệt giữa các phiên bản

nếu chỉ có 1 tham số thường so sánh với working directory

git show so sánh commit ngay tru

nếu chỉ có 1 tham số thường so sánh với working directory

git commit

Khi bạn "commit", git tạo một đối tượng "commit" mới sử dụng các tệp tin từ khu chuyển tiếp và đặt "commit" hiện tại làm cha. Sau đó nó trỏ nhánh hiện tại tới "commit" mới này. Trong hình dưới đây, nhánh hiện tại là master. Trước khi lệnh được chạy, master trỏ tới ed489. Sau đó một "commit" mới, f0cec, được tạo với cha là ed489, và cuối cùng master được dịch chuyển đến "commit" mới.

Giải thích Git qua hình ảnh

By Trinh Minh Cuong

Giải thích Git qua hình ảnh

  • 883