Hướng dẫn Git và GitHub quản lý mã nguồn cho người mới
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ũ khi cần và làm việc song song trên nhiều nhánh. GitHub là dịch vụ lưu trữ kho Git trực tuyến, thêm các công cụ cộng tác như pull request, review code, issue và tự động hóa. Với người mới, chỉ cần nắm khoảng chục lệnh Git cơ bản và quy trình làm việc với nhánh, pull request là đã có thể tham gia dự án nhóm. Bài hướng dẫn này giải thích khái niệm trước, lệnh sau, kèm cách xử lý các tình huống hay gặp.
Các khái niệm cốt lõi
| Khái niệm | Giải thích ngắn |
|---|---|
| Repository (repo) | Thư mục dự án có lịch sử Git (thư mục ẩn .git) |
| Working directory | Các file bạn đang sửa trên máy |
| Staging area | Khu vực chuẩn bị, chọn thay đổi nào sẽ vào commit tiếp theo |
| Commit | Một ảnh chụp trạng thái dự án kèm thông điệp, tác giả, thời gian |
| Branch | Nhánh phát triển độc lập, thực chất là con trỏ tới một commit |
| Remote | Bản sao kho trên máy chủ, thường đặt tên origin |
| Merge, rebase | Hai cách đưa thay đổi của nhánh này vào nhánh khác |
Git do Linus Torvalds tạo ra năm 2005 để quản lý mã nguồn nhân Linux. Vì là hệ thống phân tán, mỗi máy có toàn bộ lịch sử, làm việc được cả khi không có mạng.
Cài đặt và cấu hình lần đầu
- Cài Git: trên Windows tải Git for Windows, trên macOS dùng Xcode Command Line Tools hoặc Homebrew, trên Ubuntu dùng sudo apt install git.
- Khai báo danh tính: git config --global user.name "Tên của bạn" và git config --global user.email "[email protected]".
- Đặt tên nhánh mặc định: git config --global init.defaultBranch main.
- Tạo tài khoản GitHub, bật xác thực hai lớp.
- Thiết lập SSH key hoặc dùng GitHub CLI để đăng nhập; GitHub không còn chấp nhận mật khẩu tài khoản cho thao tác Git qua HTTPS mà dùng token hoặc trình quản lý thông tin đăng nhập.
Các lệnh dùng hằng ngày
- git init: tạo kho mới trong thư mục hiện tại; git clone <url>: tải kho có sẵn về.
- git status: xem file nào đã sửa, đã stage; nên chạy thường xuyên.
- git add <file> hoặc git add -p: chọn thay đổi đưa vào stage (tùy chọn -p cho phép chọn từng đoạn).
- git commit -m "thông điệp": lưu commit.
- git log --oneline --graph: xem lịch sử dạng gọn.
- git diff: xem thay đổi chưa stage; git diff --staged: thay đổi đã stage.
- git switch -c ten-nhanh: tạo và chuyển sang nhánh mới; git switch main: quay lại nhánh chính.
- git pull: lấy thay đổi mới từ remote; git push: đẩy commit lên remote.
File .gitignore
Liệt kê những thứ không đưa vào Git: thư mục phụ thuộc (node_modules, venv), file build, log, file cấu hình cá nhân của IDE, và đặc biệt file .env chứa mật khẩu, khóa API. GitHub có sẵn mẫu .gitignore cho từng ngôn ngữ khi tạo kho. Nếu lỡ commit bí mật, hãy coi như đã bị lộ: thu hồi và tạo khóa mới ngay, rồi mới tính đến việc xóa khỏi lịch sử.
Quy trình làm việc nhóm với GitHub
Quy trình phổ biến gọi là GitHub Flow:
- Cập nhật nhánh main mới nhất bằng git pull.
- Tạo nhánh mới cho mỗi tính năng hoặc sửa lỗi, đặt tên rõ như feature/dang-nhap-google, fix/loi-tinh-thue.
- Commit nhỏ, thường xuyên, mỗi commit một thay đổi có ý nghĩa.
- Đẩy nhánh lên GitHub và mở Pull Request (PR) vào main, mô tả thay đổi, cách kiểm tra, liên kết issue.
- Đồng nghiệp review, bình luận; bạn sửa và đẩy thêm commit.
- CI tự chạy test; khi đạt và được duyệt thì merge, xóa nhánh.
Bật quy tắc bảo vệ nhánh main: bắt buộc PR, ít nhất một người duyệt, test phải pass. Tích hợp test tự động được hướng dẫn trong bài thiết lập CI/CD pipeline tự động.
Xử lý xung đột (merge conflict)
Xung đột xảy ra khi hai nhánh sửa cùng dòng trong cùng file. Git đánh dấu đoạn xung đột bằng các dòng <<<<<<<, =======, >>>>>>>. Cách xử lý:
- Mở file, đọc cả hai phiên bản, quyết định giữ phần nào hoặc kết hợp.
- Xóa các dòng đánh dấu, chạy lại test.
- git add file đã sửa và hoàn tất merge bằng commit.
VS Code hiển thị xung đột trực quan với nút chọn nhanh; xem bài hướng dẫn sử dụng VS Code. Cập nhật nhánh thường xuyên từ main giúp xung đột nhỏ và dễ xử lý.
Viết thông điệp commit tốt
- Dòng đầu ngắn gọn, mô tả việc commit làm: "Thêm kiểm tra định dạng số điện thoại khi đăng ký".
- Nếu cần, để trống một dòng rồi giải thích vì sao thay đổi.
- Nhiều đội dùng quy ước Conventional Commits (feat, fix, docs, refactor) để tự sinh changelog.
- Tránh thông điệp vô nghĩa như "update", "sửa", "abc".
Cứu vãn khi lỡ tay
| Tình huống | Cách xử lý |
|---|---|
| Muốn bỏ thay đổi chưa commit trong một file | git restore <file> |
| Lỡ add nhầm file vào stage | git restore --staged <file> |
| Sửa thông điệp commit vừa tạo (chưa push) | git commit --amend |
| Hủy một commit đã push | git revert <commit> tạo commit đảo ngược, an toàn cho nhánh dùng chung |
| Tưởng mất commit sau khi reset | git reflog để tìm lại |
| Đang làm dở, cần chuyển nhánh gấp | git stash, sau đó git stash pop |
Tránh dùng git push --force lên nhánh người khác đang dùng; nếu cần, dùng --force-with-lease trên nhánh của riêng bạn.
Bước tiếp theo
Khi đã quen, hãy tìm hiểu rebase tương tác để dọn lịch sử trước khi tạo PR, tag và release để đánh dấu phiên bản, GitHub Actions để tự động hóa, và đóng góp vào dự án mã nguồn mở qua fork và pull request. Công cụ quản lý dự án tích hợp với GitHub được so sánh trong bài so sánh phần mềm quản lý dự án.
Câu hỏi thường gặp
Git và GitHub khác nhau thế nào?
Git là phần mềm quản lý phiên bản chạy trên máy bạn. GitHub là dịch vụ lưu trữ kho Git trực tuyến kèm công cụ cộng tác. Ngoài GitHub còn có GitLab, Bitbucket và các máy chủ Git tự host.
Nên dùng merge hay rebase?
Merge giữ nguyên lịch sử thực tế, an toàn cho người mới. Rebase tạo lịch sử thẳng, gọn hơn nhưng viết lại commit, không nên dùng trên nhánh đã chia sẻ với người khác. Hãy theo quy ước của đội.
Kho riêng tư trên GitHub có miễn phí không?
Có. Tài khoản miễn phí tạo được kho riêng tư không giới hạn với số cộng tác viên không giới hạn, kèm hạn mức nhất định cho GitHub Actions và lưu trữ gói. Một số tính năng nâng cao cần gói trả phí.
Có nên dùng giao diện đồ họa thay cho dòng lệnh không?
Giao diện như GitHub Desktop hay tích hợp Git trong VS Code giúp thao tác trực quan. Tuy vậy, nên hiểu lệnh cơ bản trên dòng lệnh để xử lý tình huống phức tạp và làm việc trên máy chủ.
Bài liên quan

Cách sử dụng Docker container hóa ứng dụng cho developer
Hướng dẫn Docker cho developer: image, container, volume, viết Dockerfile tối ưu, Docker Compose cho môi trường dev, quy tắc bảo mật và lỗi thường gặp.

Cách sử dụng Notion quản lý công việc cá nhân hiệu quả
Dựng hệ thống quản lý công việc cá nhân trên Notion: database việc cần làm, view theo ngày, dự án, ghi chú, mẫu và thói quen review để duy trì lâu dài.

Cách sử dụng Postman kiểm thử API chuyên nghiệp
Hướng dẫn Postman từ cơ bản đến chuyên nghiệp: collection, environment, xác thực, viết test script, chạy Newman trong CI và bảo vệ thông tin nhạy cảm.

Hướng dẫn cài đặt Linux Ubuntu cho lập trình viên mới
Cài Ubuntu cho lập trình viên: chọn bản LTS, tạo USB cài đặt, cài song song Windows hoặc dùng WSL 2, thiết lập công cụ dev và xử lý lỗi thường gặp.