Still Soft
Trang chủ › Phần Mềm Ứng Dụng

Hướng dẫn Git và GitHub quản lý mã nguồn cho người mới

Ban biên tập Still Soft · · Cập nhật
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ệmGiải thích ngắn
Repository (repo)Thư mục dự án có lịch sử Git (thư mục ẩn .git)
Working directoryCác file bạn đang sửa trên máy
Staging areaKhu vực chuẩn bị, chọn thay đổi nào sẽ vào commit tiếp theo
CommitMột ảnh chụp trạng thái dự án kèm thông điệp, tác giả, thời gian
BranchNhánh phát triển độc lập, thực chất là con trỏ tới một commit
RemoteBản sao kho trên máy chủ, thường đặt tên origin
Merge, rebaseHai 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

  1. 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.
  2. 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]".
  3. Đặt tên nhánh mặc định: git config --global init.defaultBranch main.
  4. Tạo tài khoản GitHub, bật xác thực hai lớp.
  5. 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:

  1. Cập nhật nhánh main mới nhất bằng git pull.
  2. 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.
  3. Commit nhỏ, thường xuyên, mỗi commit một thay đổi có ý nghĩa.
  4. Đẩ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.
  5. Đồng nghiệp review, bình luận; bạn sửa và đẩy thêm commit.
  6. 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ý:

  1. Mở file, đọc cả hai phiên bản, quyết định giữ phần nào hoặc kết hợp.
  2. Xóa các dòng đánh dấu, chạy lại test.
  3. 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ốngCách xử lý
Muốn bỏ thay đổi chưa commit trong một filegit restore <file>
Lỡ add nhầm file vào stagegit 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 đã pushgit revert <commit> tạo commit đảo ngược, an toàn cho nhánh dùng chung
Tưởng mất commit sau khi resetgit reflog để tìm lại
Đang làm dở, cần chuyển nhánh gấpgit 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