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:
- thư mục làm việc: working directory
- vùng chuyển tiếp: staging area
- 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