Câu 1Đâu là phát biểu đúng về khác biệt giữa lưu đè và commit?
Git là gì — cơ chế ghi lại thay đổi và quay về trạng thái trước
Bài viết này nằm trong khóa Kiến thức nền tảng về CNTT, xây dựng từ đầu những kiến thức CNTT thực tế tối thiểu mà bạn cần để lập trình và vibe coding.
Lưu đè thì không giữ lại trạng thái trước đó. Hình minh họa cho thấy luồng từ việc để lại bản ghi bằng commit đến việc lấy ra một thời điểm trước từ các bản ghi đã chồng lên nhau trong repository.
Bài viết này nói về Git.
Git là cơ chế ghi lại thay đổi của file để bạn quay về trạng thái trước, và khi đặt các bản ghi đó lên server, bạn đưa được người khác về cùng một trạng thái.
Các bản ghi nằm ở ba nơi đều giống nhau, và chính server đặt ở giữa đưa chúng về cùng một trạng thái.
Git làm gì — để lại bản ghi và chia sẻ qua remote
Cơ chế ghi lại thay đổi của file theo từng thời điểm để lấy lại được trạng thái trong quá khứ là quản lý phiên bản (version control).
Nơi lưu các bản ghi đó là repository, cùng thứ đó khi đặt ở phía server là remote repository, và một lần ghi là một commit.
Các dịch vụ tiêu biểu để đặt remote repository là GitHub và GitLab, và GitHub không phải là bản thân Git, mà là nơi để đặt remote repository.
- app.js và style.css
- Lưu đè thì nội dung bị thay thế
- Commit xếp theo thứ tự cũ trước
- git commit thêm một commit
- Các commit gửi bằng git push xếp ở đây
- https://github.com/example/my-app.git chính là nơi đó
- Máy tính khác cũng đọc ghi được
Gửi các bản ghi trên máy tính của bạn lên server là push, lấy các bản ghi trên server về là pull.
Vì có một server đặt ở giữa nên đồng nghiệp lấy về lúc nào thì nội dung cũng như nhau.
Các câu về Git xuất hiện trong tài liệu hướng dẫn chia thành ba loại.
Cột bên trái chỉ nằm trong máy tính của bạn, còn cột giữa và cột phải thì trao đổi với GitHub.
Lưu đè không giữ lại trạng thái trước — quản lý phiên bản ghi lại điều gì
Lưu đè là thao tác thay nội dung của app.js bằng nội dung hiện tại.
Sau khi thay xong thì nội dung cũ không còn lại gì, nên có lưu bao nhiêu lần bạn cũng không quay về được trạng thái trước.
| Việc bạn đã làm trước khi sửa | Nơi còn nội dung cũ | Sau khi chương trình hỏng |
|---|---|---|
| Chỉ lưu đè | Không còn ở đâu cả | Không quay lại được |
| Vẫn để trình soạn thảo mở | Lịch sử hoàn tác (đóng lại là mất) | Sửa trong lúc còn mở thì hoàn tác được |
| Đã chạy git commit | Bản ghi trong repository | Lúc nào cũng quay lại được |
Chỉ khi đã commit thì nội dung cũ mới còn lại trong repository.
Điểm phân định duy nhất là bạn có chạy git commit một lần trước khi sửa hay không.
Một lần chạy đó tạo ra một thời điểm để bạn quay về.
Chỉ commit mới để lại bản ghi
Lưu đè là thao tác dùng nội dung hiện tại xóa nội dung cũ, và phần đã bị xóa không còn lại ở bất kỳ đâu trên máy tính.
Commit thì không xóa nội dung mà thêm một bản ghi về app.js tại thời điểm đó, nên khi chương trình hỏng, những thời điểm bạn quay về được chỉ là những thời điểm đã commit.
Commit gồm hai bước: chọn thay đổi cần ghi rồi mới để lại bản ghi
Commit chia thành hai bước: chọn trước, ghi lại sau.
Bước chọn và đăng ký là staging (bước chọn và đăng ký những thay đổi sẽ đưa vào commit), và chính vì hai bước này mà trong thư mục my-app có ba chỗ chứa.
- app.js — nội dung đang mở trong trình soạn thảo
- style.css — file viết phần hiển thị của màn hình
- Lưu đè thì nội dung ở đây bị thay thế
- Chứa các thay đổi đã chọn bằng git add
- Trở lại rỗng khi bạn chạy git commit
- Commit xếp theo thứ tự cũ trước
- git commit thêm một commit
Thay đổi đi từ trên xuống dưới qua hai lần: git add và git commit.
Thay đổi ở index.html mà bạn không chọn thì không mất, lần sau bạn chọn lại được.
Các bước kiểm tra trước khi ghi lại hiện ra ở ba dòng này.
# Kiểm tra những file đã sửa
git status
# Chọn và đăng ký những thay đổi cần ghi
git add app.js
# Ghi lại thay đổi đã chọn kèm một thông điệp ngắn
git commit -m "Thêm màn hình đăng nhập"
Chạy git status thì tên các file bạn đã sửa hiện ra, còn git log cho ra danh sách các bản ghi.
Nếu chạy git commit mà chưa chạy git add thì không có thay đổi nào được chọn, nên không có bản ghi nào được tạo.
Chọn thứ cần ghi trước khi ghi
Commit có hai bước: chọn và ghi lại.
git add chọn những thay đổi đưa vào bản ghi lần này, git commit biến đúng phần đã chọn thành một bản ghi, nên nếu quên bước chọn thì không có bản ghi nào được thêm.
Repository nằm trong thư mục, và commit xếp theo thứ tự cũ trước
Thư mục riêng chứa repository được tạo ra ngay khi bạn chạy git init để bắt đầu ghi lại trong thư mục đó.
Mỗi lần commit, các bản ghi bên trong lại tăng thêm một.
- app.js tại lúc bạn dựng xong màn hình
- Ngày giờ và thông điệp "Tạo màn hình"
- app.js và style.css tại lúc bạn thêm ô nhập
- Ngày giờ và thông điệp "Thêm ô nhập"
- app.js được ghi lại gần đây nhất
- Ngày giờ và thông điệp "Thêm màn hình đăng nhập"
Thao tác quay lại là chọn một bản ghi trong dãy đó và thay app.js đang làm việc bằng nội dung của nó.
Với những file bạn không muốn ghi lại, bạn viết được tên chúng vào file cấu hình .gitignore nằm trong thư mục.
Cách này chỉ có tác dụng với những file chưa từng được ghi lại; với file đã ghi lại một lần thì nó không còn tác dụng.
Bản ghi không mất đi, xếp theo thứ tự cũ trước
Repository nằm trong thư mục riêng ở bên trong thư mục my-app.
Mỗi lần commit, bản ghi lại tăng thêm một, và bản ghi trước không bao giờ bị viết đè, nên quay lại nghĩa là chọn một bản ghi trong dãy đó và cho file hiện tại mang nội dung của nó.
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
Câu 2Commit chia thành hai bước. Bước nào diễn ra trước khi bản ghi được để lại?
Câu 3Thao tác nào gửi commit đã để lại trong repository trên máy tính của bạn lên remote repository đặt trên server?