Chào các bạn,
Quản lý mã nguồn là một phần quen thuộc trong công việc phát triển phần mềm. Trong đó, GitHub là một nền tảng phổ biến giúp chúng ta lưu trữ, theo dõi sự thay đổi của mã nguồn và phối hợp làm việc cùng nhau.
Bài viết này sẽ giới thiệu cách sử dụng GitHub đi từ các thao tác cơ bản đến một số kỹ thuật mở rộng, giúp bạn vận hành dự án một cách trơn tru.
0. Chuẩn bị ban đầu
Trước khi bắt đầu, hãy chắc chắn bạn đã chuẩn bị những điều cơ bản.
Cài đặt Git:
Truy cập git-scm.com và tải Git cho hệ điều hành của bạn.
Tạo tài khoản GitHub:
Đăng ký tại github.com nếu chưa có tài khoản.
Cấu hình Git cục bộ:
Sau khi cài đặt Git, bạn cần thiết lập tên người dùng và email (những thông tin này sẽ được gắn vào mỗi commit):
| |
1. Các khái niệm cốt lõi
Trước khi đi vào các dòng lệnh, chúng ta điểm qua một vài khái niệm thường gặp:
Repository (Kho lưu trữ): Nơi chứa toàn bộ mã nguồn, tài liệu và lịch sử thay đổi của dự án. Có thể là công khai (public) hoặc riêng tư (private).
Commit: Một điểm lưu trạng thái của mã nguồn. Mỗi commit đi kèm với một thông điệp (message) mô tả sự thay đổi và một mã định danh (hash) duy nhất.
Branch (Nhánh): Một phiên bản độc lập của repository. Nhánh giúp bạn phát triển tính năng mới hoặc sửa lỗi mà không làm ảnh hưởng đến mã nguồn chính (thường là nhánh
mainhoặcmaster).Remote: Một phiên bản của repository nằm trên máy chủ (như GitHub). Mặc định, repository được sao chép về máy địa phương được kết nối với một remote có tên
origin.Pull Request (PR): Yêu cầu gộp (merge) các thay đổi từ nhánh này vào nhánh khác. PR cho phép các thành viên nhóm xem xét (review) mã trước khi gộp.
2. Các thao tác cơ bản
Đây là những lệnh bạn sẽ sử dụng thường xuyên trong quá trình làm việc cá nhân.
2.1 Khởi tạo hoặc tải dự án
| |
2.2 Lưu lại các thay đổi
Sau khi chỉnh sửa mã nguồn, bạn cần đưa các file thay đổi vào trạng thái chờ (staging) và lưu chúng lại (commit).
| |
2.3 Viết commit messages hiệu quả
Commit message tốt giúp bạn và nhóm hiểu rõ tại sao sự thay đổi được thực hiện. Thay vì viết vội vã, hãy dành thời gian cho mô tả rõ ràng.
| |
Quy tắc commit message tốt:
- Dòng đầu: Tóm tắt ngắn gọn (50 ký tự), sử dụng dạng mệnh lệnh (ví dụ: “Fix” thay vì “Fixed” hoặc “Fixes”)
- Dòng thứ 2: Để trống
- Dòng thứ 3 trở đi: Mô tả chi tiết (nếu cần), giải thích tại sao thay đổi được thực hiện
| |
2.4 Đồng bộ với GitHub
| |
2.5 Xem lịch sử commit
| |
2.6 Tệp .gitignore
Một số file không nên commit vào repository (file tạm, biến môi trường, thư viện được tải về, v.v.). Tạo file .gitignore trong thư mục gốc của repository để loại bỏ các file này.
| |
Một khi file đã được commit, .gitignore không thể làm cho nó biến mất. Nếu bạn muốn bỏ qua một file đã được commit:
| |
3. Phối hợp làm việc nhóm
Khi tham gia vào một nhóm, việc phân chia và gộp mã nguồn diễn ra thường xuyên. Quy trình làm việc với Pull Request là tiêu chuẩn trong hầu hết các dự án.
3.1 Tạo và quản lý nhánh
| |
Quy ước đặt tên nhánh:
| |
3.2 Quy trình Pull Request (PR)
Pull Request (PR) là cách thông dụng để gộp mã nguồn trong các nhóm. Nó cho phép đồng đội xem xét và thảo luận về mã trước khi gộp vào nhánh chính.
Các bước:
- Tạo nhánh mới từ main:
| |
- Commit các thay đổi:
| |
Tạo Pull Request trên GitHub:
- Truy cập repository trên GitHub
- Nhấp nút “Compare & pull request”
- Viết tiêu đề và mô tả PR
- Liên kết đến issue nếu có:
fixes #123hoặccloses #456 - Nhấp “Create pull request”
Chờ code review:
- Đồng đội sẽ xem xét mã
- Có thể yêu cầu thay đổi (request changes)
- Bạn tiếp tục commit vào nhánh để cập nhật PR
Merge vào main:
- Sau khi được phê duyệt (approved), PR có thể merge
- Thường sử dụng “Squash and merge” hoặc “Create a merge commit”
Xóa nhánh:
| |
3.3 Cập nhật nhánh từ main
Trong quá trình PR, nhánh main có thể có cập nhật từ đồng đội khác. Cập nhật nhánh của bạn để tránh xung đột:
| |
3.4 Xử lý Merge Conflicts
Khi gộp nhánh, Git đôi khi không thể tự động giải quyết vì cùng một dòng mã được chỉnh sửa ở hai nhánh khác nhau.
Nhận biết xung đột:
| |
Giải quyết xung đột:
Mở file có xung đột. Git sẽ đánh dấu như sau:
| |
Chỉnh sửa file để giữ phần code đúng:
| |
4. Một số kỹ thuật mở rộng
Khi đã quen thuộc với các thao tác trên, bạn có thể áp dụng thêm một vài kỹ thuật để xử lý các tình huống phức tạp hơn.
4.1 Rebase
Giống như merge, rebase dùng để tích hợp các thay đổi từ nhánh này sang nhánh khác. Điểm khác biệt là rebase viết lại lịch sử commit để trở nên liền mạch (tuyến tính) hơn, làm cho log trông sạch hơn.
Khi nào sử dụng:
- Khi nhánh của bạn chưa được chia sẻ (chỉ trên máy địa phương hoặc nhánh cá nhân)
- Muốn giữ lịch sử commit sạch và dễ đọc
Cách sử dụng:
| |
Lưu ý quan trọng: Không sử dụng rebase trên các nhánh đã được chia sẻ chung với người khác. Rebase viết lại lịch sử, khiến việc đồng bộ mã của nhóm trở nên khó khăn. Chỉ rebase trên các nhánh cá nhân hoặc chưa được push.
Ví dụ:
| |
4.2 Stash
Nếu bạn đang làm dở một tính năng nhưng cần chuyển sang nhánh khác để xử lý việc khác (ví dụ: sửa bug cấp tốc), stash giúp bạn cất tạm các thay đổi chưa được commit.
Khi nào sử dụng:
- Cần chuyển nhánh nhưng không muốn commit công việc chưa hoàn thiện
- Muốn lưu tạm công việc để làm việc khác
Cách sử dụng:
| |
Ví dụ thực tế:
| |
4.3 Cherry-pick
Kỹ thuật này cho phép bạn chọn một (hoặc một vài) commit cụ thể từ nhánh khác và áp dụng nó vào nhánh hiện tại, mà không cần merge toàn bộ nhánh đó.
Khi nào sử dụng:
- Bạn cần một bug fix từ nhánh khác mà chưa sẵn sàng merge toàn bộ
- Cần áp dụng một commit vào nhiều nhánh khác nhau
- Nhân bản một commit từ nhánh này sang nhánh khác
Cách sử dụng:
| |
Ví dụ:
| |
Lưu ý: Cherry-pick tạo commit mới, vì vậy nó không phải là “áp dụng” commit ban đầu mà là “sao chép” commit. Sử dụng một cách có chủ ý vì nó có thể gây nhầm lẫn về lịch sử.
4.4 Reset và Revert
Đôi khi bạn cần phải hoàn tác các thay đổi. Git cung cấp hai cách khác nhau:
git revert (An toàn, tạo commit mới):
| |
Dùng khi: Commit đã được push lên GitHub hoặc chia sẻ với nhóm.
git reset (Viết lại lịch sử, cẩn thận):
| |
Dùng khi: Commit chỉ ở máy địa phương, chưa push.
So sánh:
| Lệnh | Khi dùng | An toàn |
|---|---|---|
revert | Commit đã push | Có |
reset | Commit chưa push | Cẩn thận |
4.5 Reflog: Công cụ cứu rỗi
Nếu bạn vô tình mất một commit hoặc thao tác sai, reflog sẽ giúp bạn tìm lại nó.
| |
5. Mẹo và best practices
5.1 Trước khi push
| |
5.2 Cập nhật thường xuyên
| |
5.3 Lên kế hoạch commit
| |
5.4 Đọc trước khi merge
- Luôn xem xét (review) mã trước khi merge.
- Chạy tests cục bộ trước khi push.
- Hỏi đồng đội nếu không chắc.
Tổng kết
Sử dụng tốt Git và GitHub sẽ giúp quá trình phát triển phần mềm của bạn trở nên có tổ chức, dễ dàng tra cứu, và thuận lợi cho phối hợp nhóm.
Lộ trình học tập:
- Bắt đầu với các lệnh cơ bản (add, commit, push, pull).
- Thành thạo workflow Pull Request.
- Dần áp dụng các kỹ thuật mở rộng khi dự án lớn hơn.
- Tìm hiểu Git Flow hoặc GitHub Flow cho quy mô lớn hơn.
Hy vọng bài viết này cung cấp một góc nhìn tổng quan và hữu ích cho công việc của bạn. Hãy thực hành thường xuyên, vì Git là công cụ càng dùng càng quen!
Tài liệu tham khảo: