Git – Hệ thống quản lý phiên bản phân tán mạnh mẽ
Git là một hệ thống quản lý phiên bản phân tán (Distributed Version Control System) được phát triển bởi Linus Torvalds vào năm 2005. Đây là công cụ không thể thiếu trong quá trình phát triển phần mềm hiện đại, giúp các developer theo dõi, quản lý và cộng tác hiệu quả trên các dự án.
Tại sao Git lại quan trọng?
Git giải quyết nhiều vấn đề phổ biến trong việc phát triển phần mềm:
Theo dõi thay đổi: Git ghi lại mọi thay đổi trong code của bạn, cho phép bạn xem ai đã thay đổi gì, khi nào và tại sao.
Sao lưu và khôi phục: Mọi phiên bản của code đều được lưu trữ, bạn có thể dễ dàng quay lại phiên bản trước đó nếu cần.
Cộng tác nhóm: Nhiều người có thể làm việc trên cùng một dự án mà không lo xung đột hoặc mất dữ liệu.
Phân nhánh: Tạo các nhánh để phát triển tính năng mới mà không ảnh hưởng đến code chính.
Các khái niệm cơ bản
Repository (Repo)
Repository là nơi Git lưu trữ tất cả dữ liệu về dự án của bạn, bao gồm files, lịch sử thay đổi, và metadata. Có hai loại repository:
- Local Repository: Nằm trên máy tính của bạn
- Remote Repository: Nằm trên server (như GitHub, GitLab)
Working Directory, Staging Area và Git Directory
Git hoạt động với ba khu vực chính:
- Working Directory: Nơi bạn làm việc với files
- Staging Area: Nơi chuẩn bị các thay đổi trước khi commit
- Git Directory: Nơi Git lưu trữ metadata và object database
Commit
Commit là một snapshot của dự án tại một thời điểm cụ thể. Mỗi commit có:
- Một hash ID duy nhất
- Thông điệp mô tả thay đổi
- Thông tin về tác giả và thời gian
- Tham chiếu đến commit cha
Branch (Nhánh)
Branch cho phép bạn tách ra khỏi dòng phát triển chính để làm việc trên các tính năng mới mà không ảnh hưởng đến code chính.
Cài đặt Git
Trên Windows
# Tải xuống từ https://git-scm.com/download/win
# Hoặc sử dụng Chocolatey
# Hoặc sử dụng winget
Trên macOS
# Sử dụng Homebrew
# Hoặc sử dụng MacPorts
Trên Linux (Ubuntu/Debian)
Cấu hình ban đầu
Các lệnh Git cơ bản
Khởi tạo và sao chép repository
# Khởi tạo repository mới
# Sao chép repository từ remote
# Sao chép với tên thư mục khác
Làm việc với files
# Xem trạng thái repository
# Thêm files vào staging area
# Xem sự khác biệt
# Commit thay đổi
Xem lịch sử
# Xem lịch sử commit
# Xem thay đổi trong commit cụ thể
Làm việc với remote repository
# Thêm remote repository
# Xem danh sách remote
# Đẩy code lên remote
# Kéo code từ remote
Làm việc với Branches
Tạo và chuyển đổi branch
# Xem danh sách branch
# Tạo branch mới
# Chuyển sang branch khác
# Tạo và chuyển sang branch mới
# Sử dụng git switch (Git 2.23+)
Merge và Rebase
# Merge branch vào branch hiện tại
# Rebase branch hiện tại lên branch khác
# Xóa branch
Xử lý xung đột (Conflicts)
Khi merge hoặc rebase, đôi khi xảy ra xung đột. Git sẽ đánh dấu các file có xung đột:
<<<<<<< HEAD
Code từ branch hiện tại
=======
Code từ branch khác
>>>>>>> feature-branch
Để giải quyết:
- Mở file và chỉnh sửa thủ công
- Xóa các dấu hiệu xung đột (
<<<<<<<,=======,>>>>>>>) - Add file đã sửa:
git add filename - Commit:
git commit -m "Resolve conflict"
Các lệnh hữu ích khác
Stash - Lưu tạm thời thay đổi
# Lưu thay đổi vào stash
# Xem danh sách stash
# Áp dụng stash
# Xóa stash
Reset và Revert
# Reset về commit trước (nguy hiểm!)
# Revert commit (an toàn hơn)
# Reset file về trạng thái của commit cuối
Tag
# Tạo tag
# Đẩy tag lên remote
# Xem danh sách tag
Workflow phổ biến
Git Flow
Git Flow là một workflow phổ biến với các branch:
main/master: Code productiondevelop: Code developmentfeature/*: Các tính năng mớirelease/*: Chuẩn bị releasehotfix/*: Sửa lỗi khẩn cấp
GitHub Flow
Workflow đơn giản hơn:
- Tạo branch từ
main - Thêm commits
- Mở Pull Request
- Thảo luận và review
- Merge vào
main
Best Practices
Commit Messages
Viết commit message rõ ràng và có ý nghĩa:
feat: add user authentication
fix: resolve login validation bug
docs: update README installation guide
refactor: optimize database queries
Gitignore
Tạo file .gitignore để loại trừ files không cần thiết:
/
*.log
/
/
.env
.env.local
.vscode/
.idea/
.DS_Store
.db
Atomic Commits
Mỗi commit nên thực hiện một thay đổi logic duy nhất. Điều này giúp:
- Dễ review code
- Dễ debug khi có lỗi
- Dễ revert nếu cần
Troubleshooting phổ biến
Undo commit cuối cùng
# Giữ lại thay đổi trong working directory
# Bỏ thay đổi hoàn toàn
Thay đổi commit message cuối
Khôi phục file đã xóa
Kết luận
Git là công cụ mạnh mẽ và linh hoạt, tuy nhiên cần thời gian để thành thạo. Hãy bắt đầu với các lệnh cơ bản và dần dần khám phá các tính năng nâng cao. Việc thực hành thường xuyên và hiểu rõ workflow của team sẽ giúp bạn sử dụng Git hiệu quả hơn.
Nhớ rằng Git không chỉ là công cụ lưu trữ code mà còn là hệ thống ghi lại lịch sử phát triển dự án. Hãy tận dụng sức mạnh này để xây dựng các dự án chất lượng và cộng tác hiệu quả với team.