Git là gì? Git là hệ thống quản lý phiên bản phân tán, giúp lưu lại lịch sử thay đổi của mã nguồn, quay lại phiên bản cũ và làm việc nhóm mà không ghi đè code của nhau. GitHub là gì? GitHub là dịch vụ lưu trữ kho Git trực tuyến, bổ sung các tính năng cộng tác như pull request, review code, quản lý issue và CI/CD. Bài viết giải thích sự khác nhau giữa Git, GitHub, GitLab và hướng dẫn các lệnh cơ bản để bạn dùng được ngay.
Vì sao lập trình viên nào cũng cần Git?
Thử tưởng tượng bạn đang làm một dự án và có các thư mục du-an-final, du-an-final-2, du-an-final-that-su… Khi làm việc nhóm, mọi người gửi file qua chat và không ai chắc bản nào mới nhất. Git giải quyết những vấn đề đó:
- Lưu lịch sử: mỗi lần lưu (commit) đều ghi lại ai thay đổi gì, khi nào và vì sao.
- Quay lại an toàn: có thể khôi phục về bất kỳ thời điểm nào trước đó.
- Làm việc song song: mỗi người làm trên một nhánh (branch) riêng rồi gộp lại.
- Phân tán: mỗi máy có bản sao đầy đủ lịch sử, không phụ thuộc hoàn toàn vào một máy chủ.
Hầu hết công ty phần mềm dùng Git, nên đây là kỹ năng gần như bắt buộc khi đi làm.
Git, GitHub và GitLab khác nhau thế nào?
| Git | GitHub | GitLab | |
|---|---|---|---|
| Bản chất | Phần mềm quản lý phiên bản, chạy trên máy bạn | Dịch vụ lưu trữ kho Git trên web | Dịch vụ lưu trữ kho Git, có thể tự cài trên server riêng |
| Cần internet | Không | Có | Có (hoặc mạng nội bộ nếu tự host) |
| Tính năng nổi bật | commit, branch, merge | Pull request, Actions, cộng đồng mã nguồn mở lớn | Merge request, CI/CD tích hợp sâu, tự host |
Nói ngắn gọn: Git là công cụ, còn GitHub và GitLab là nơi lưu trữ và cộng tác dựa trên Git.
Cài đặt và cấu hình Git
- Tải Git tại git-scm.com (Windows) hoặc cài qua trình quản lý gói (macOS: Homebrew, Linux: apt/dnf).
- Kiểm tra:
git --version. - Cấu hình tên và email (sẽ xuất hiện trong mỗi commit):
git config --global user.name "Tên Của Bạn"
git config --global user.email "email@example.com"
git config --global init.defaultBranch main
Ba vùng làm việc của Git
Hiểu ba vùng này giúp bạn không bị rối khi dùng lệnh:
- Working directory: thư mục bạn đang sửa file.
- Staging area: nơi tập hợp những thay đổi bạn muốn đưa vào commit tiếp theo (
git add). - Repository: lịch sử commit đã lưu (
git commit).
Các lệnh Git cơ bản
git init # tạo kho Git mới
git status # xem trạng thái file
git add index.html # đưa file vào staging
git add . # đưa tất cả thay đổi
git commit -m "Thêm trang chủ" # lưu commit
git log --oneline # xem lịch sử
git diff # xem thay đổi chưa staging
Viết commit message ngắn, rõ ràng, mô tả đã làm gì: “Sửa lỗi đăng nhập khi mật khẩu trống” tốt hơn nhiều so với “fix”.
File .gitignore
Tạo file .gitignore để Git bỏ qua những thứ không nên đưa lên kho như node_modules/, .env, file build. Đặc biệt không bao giờ commit mật khẩu hay API key.
Làm việc với branch
Branch cho phép phát triển tính năng mới mà không ảnh hưởng nhánh chính.
git switch -c tinh-nang-dang-nhap # tạo và chuyển sang nhánh mới
# ... sửa code, commit ...
git switch main
git merge tinh-nang-dang-nhap
Xử lý conflict
Conflict xảy ra khi hai nhánh cùng sửa một đoạn code. Git sẽ đánh dấu đoạn xung đột bằng các ký hiệu <<<<<<<, =======, >>>>>>>. Bạn chỉ cần chọn giữ đoạn nào (hoặc kết hợp), xoá ký hiệu, sau đó git add và git commit. Conflict là chuyện bình thường, không phải lỗi nghiêm trọng.
Merge và rebase
git merge giữ nguyên lịch sử của cả hai nhánh và tạo commit gộp. git rebase “đặt lại” các commit của nhánh bạn lên trên nhánh mới nhất, cho lịch sử thẳng hàng hơn. Nguyên tắc an toàn: không rebase những nhánh đã chia sẻ với người khác.
Đưa code lên GitHub
- Tạo tài khoản GitHub và tạo repository mới.
- Kết nối kho trên máy với GitHub và đẩy code lên:
git remote add origin https://github.com/ten-ban/du-an.git
git push -u origin main
Các lệnh đồng bộ thường dùng: git pull (lấy thay đổi mới về), git fetch (chỉ tải về, chưa gộp), git clone (sao chép kho có sẵn về máy).
Quy trình pull request khi làm việc nhóm
- Cập nhật nhánh chính:
git switch main && git pull. - Tạo nhánh mới cho tính năng hoặc sửa lỗi.
- Commit nhỏ, thường xuyên, message rõ ràng.
- Push nhánh lên GitHub và tạo pull request (GitLab gọi là merge request).
- Đồng đội review, góp ý; bạn sửa và push tiếp.
- Khi được duyệt và CI chạy qua, gộp vào nhánh chính.
Quy trình này giúp code luôn được kiểm tra trước khi vào sản phẩm và là kỹ năng nhà tuyển dụng thường hỏi.
Lỗi thường gặp và cách xử lý
| Tình huống | Cách xử lý |
|---|---|
| Commit nhầm message | git commit --amend (khi chưa push) |
| Muốn bỏ thay đổi một file chưa commit | git restore <file> |
| Đưa nhầm file vào staging | git restore --staged <file> |
| Muốn hoàn tác một commit đã push | git revert <mã commit> (tạo commit đảo ngược, an toàn) |
| Cần tạm cất thay đổi để chuyển nhánh | git stash, sau đó git stash pop |
Hãy cẩn thận với git reset --hard và git push --force vì chúng có thể làm mất code.
GitHub còn dùng để làm gì?
- Portfolio: nhà tuyển dụng thường xem GitHub để đánh giá dự án thực tế của bạn.
- GitHub Actions: tự động chạy test, build và deploy mỗi khi push code, một phần quan trọng trong lộ trình DevOps.
- Đóng góp mã nguồn mở: sửa lỗi tài liệu hoặc code cho dự án bạn dùng là cách học rất tốt.
- GitHub Pages: đăng website tĩnh miễn phí, phù hợp cho dự án HTML/CSS đầu tiên trong lộ trình học lập trình web.
Quy ước đặt tên nhánh và commit
Khi làm việc nhóm, quy ước giúp lịch sử Git dễ đọc và tự động hoá được nhiều việc. Một số quy ước phổ biến:
- Tên nhánh theo loại công việc:
feature/dang-nhap-google,fix/loi-thanh-toan,chore/cap-nhat-thu-vien. - Conventional Commits: message bắt đầu bằng loại thay đổi như
feat:,fix:,docs:,refactor:,test:. Ví dụ:feat: thêm bộ lọc khoá học theo danh mục. Quy ước này giúp tự sinh changelog và đánh số phiên bản. - Commit nhỏ, có ý nghĩa: mỗi commit nên làm một việc. Commit “sửa tất cả” rất khó review và khó hoàn tác.
Các mô hình làm việc với nhánh
Mỗi nhóm có thể chọn một chiến lược phân nhánh phù hợp:
| Mô hình | Cách làm | Phù hợp |
|---|---|---|
| GitHub Flow | Nhánh main luôn deploy được; mỗi tính năng một nhánh, merge qua pull request | Nhóm nhỏ, deploy liên tục |
| Git Flow | Có thêm nhánh develop, release, hotfix | Sản phẩm phát hành theo phiên bản |
| Trunk-based | Mọi người merge thường xuyên vào nhánh chính, dùng feature flag để ẩn tính năng chưa xong | Nhóm có CI/CD và test tự động tốt |
Người mới nên bắt đầu với GitHub Flow vì đơn giản và đủ dùng cho đa số dự án.
Bảo mật khi dùng Git và GitHub
- Dùng khoá SSH hoặc token có thời hạn thay vì mật khẩu khi kết nối với GitHub.
- Bật xác thực hai lớp (2FA) cho tài khoản GitHub.
- Nếu lỡ commit mật khẩu hay API key, hãy thu hồi và tạo khoá mới ngay; xoá khỏi lịch sử Git là chưa đủ vì người khác có thể đã sao chép.
- Bật bảo vệ nhánh chính (branch protection): bắt buộc pull request và review trước khi merge.
Câu hỏi thường gặp
Git có khó học không?
Các lệnh cơ bản (add, commit, push, pull, branch) có thể học trong vài buổi. Phần khó hơn như rebase, xử lý conflict phức tạp sẽ quen dần khi làm dự án thật.
Nên dùng Git bằng dòng lệnh hay giao diện?
Nên học dòng lệnh trước để hiểu bản chất, sau đó có thể dùng giao diện trong VS Code hoặc các ứng dụng Git GUI cho tiện.
GitHub có miễn phí không?
GitHub có gói miễn phí cho phép tạo kho công khai và riêng tư; các gói trả phí bổ sung tính năng cho nhóm và doanh nghiệp. Chi tiết xem trên trang giá chính thức.
Không phải lập trình viên có dùng Git được không?
Được. Git quản lý tốt mọi file văn bản như tài liệu Markdown, cấu hình, nội dung website.
Kết luận
Git giúp bạn quản lý mã nguồn an toàn, còn GitHub và GitLab giúp cộng tác và chia sẻ. Hãy dùng Git ngay từ dự án đầu tiên, kể cả khi làm một mình. Để học sâu về branch, rebase, xử lý conflict và quy trình làm việc nhóm, tham khảo khoá học Git, GitHub, GitLab của MelyDemy.