20+ Các Lệnh Git Cơ Bản Từ A-Z: Cheat Sheet Và Hướng Dẫn Sử Dụng (2026)

NỘI DUNG

Trong kỷ nguyên phát triển phần mềm hiện đại, việc quản lý mã nguồn hiệu quả không chỉ là yêu cầu bắt buộc đối với các lập trình viên mà còn là nền tảng cốt lõi của quy trình DevOps và CI/CD. Trong đó, Git nổi lên như một công cụ quản lý phiên bản mã nguồn phổ biến hàng đầu thế giới.

Bài viết này sẽ cung cấp một hướng dẫn chi tiết, dễ hiểu về các lệnh Git cơ bản từ đầu đến cuối, giúp bạn làm quen và tự tin áp dụng vào các dự án thực tế.

Các Lệnh Git Cơ Bản


Git Là Gì?

Git là gì?

Git là một hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS) mã nguồn mở và miễn phí. Được khởi xướng bởi Linus Torvalds vào năm 2005 (cha đẻ của hệ điều hành Linux), Git được thiết kế để quản lý các dự án phần mềm từ nhỏ đến rất lớn với tốc độ và hiệu suất vượt trội.

Khác với các hệ thống quản lý phiên bản tập trung cũ, mỗi máy tính của lập trình viên khi sử dụng Git sẽ chứa một bản sao đầy đủ của toàn bộ lịch sử mã nguồn (Local Repository). Điều này mang lại sự linh hoạt tối đa, cho phép bạn làm việc offline và đồng bộ hóa lại với máy chủ chung bất cứ lúc nào.

Vì sao Git trở thành tiêu chuẩn của ngành phần mềm?

Git được áp dụng rộng rãi nhờ sở hữu nhiều ưu điểm vượt trội:

  • Quản lý source code tối ưu: Hỗ trợ theo dõi sát sao từng thay đổi nhỏ trong mã nguồn mà không làm xáo trộn cấu trúc dự án.
  • Làm việc nhóm hiệu quả: Cho phép nhiều lập trình viên cùng làm việc trên một dự án mà không lo đè lên code của nhau nhờ cơ chế phân nhánh (branching) và hợp nhất (merging) thông minh.
  • Theo dõi lịch sử thay đổi: Bạn có thể biết ai đã thay đổi dòng code nào, vào thời điểm nào và lý do tại sao thông qua các thông điệp ghi nhận (commit message).
  • Khôi phục dữ liệu khi có lỗi: Dễ dàng quay lại bất kỳ phiên bản nào trong quá khứ nếu vô tình xảy ra lỗi trong quá trình phát triển.
  • Hỗ trợ CI/CD và DevOps: Hầu hết các công cụ tự động hóa ngày nay đều tích hợp trực tiếp với Git để kích hoạt các tiến trình build, test và deploy tự động.

Git khác gì với Version Control System (VCS)?

Để hình dung rõ hơn về sự tiến hóa của công cụ quản lý mã nguồn, hãy cùng xem qua bảng so sánh dưới đây giữa Git và các hệ thống VCS tập trung truyền thống như SVN hay CVS:

Tiêu chí Git SVN CVS
Kiến trúc Phân tán (Distributed) Tập trung (Centralized) Tập trung (Centralized)
Làm việc Offline Có (Đầy đủ tính năng trên máy cục bộ) Hạn chế (Cần kết nối máy chủ trung tâm) Hạn chế (Cần kết nối máy chủ trung tâm)
Phân nhánh (Branching) Rất nhanh và nhẹ nhàng Chậm và tốn tài nguyên Khó khăn và hạn chế
Độ phổ biến hiện nay Rất cao (Hơn 90% dự án phần mềm) Trung bình (Dự án legacy cũ) Thấp (Ít còn sử dụng)

Git Được Sử Dụng Trong Thực Tế Như Thế Nào?

Cá nhân phát triển phần mềm

Ngay cả khi làm việc độc lập, Git vẫn mang lại giá trị rất lớn. Bạn có thể sử dụng Git để lưu trữ lịch sử phát triển của các dự án cá nhân như:

  • Website WordPress: Theo dõi các tùy biến trong theme, plugin hoặc cấu hình hệ thống.
  • Dự án Laravel, Node.js, Python: Quản lý mã nguồn qua các giai đoạn phát triển từ thử nghiệm đến hoàn thiện sản phẩm.

Làm việc nhóm

Trong môi trường doanh nghiệp hoặc các dự án mã nguồn mở, Git đóng vai trò cầu nối:

  • Frontend Team: Phát triển giao diện trên các nhánh tính năng (feature branch) độc lập.
  • Backend Team: Xây dựng API và cơ sở dữ liệu trên các nhánh tương ứng.
  • DevOps Team: Đảm bảo mã nguồn từ các team được kiểm tra và tích hợp an toàn trước khi đưa lên môi trường sản xuất (Production).

CI/CD và DevOps

Git đóng vai trò là “nguồn gốc của sự thật” (Single Source of Truth) trong hạ tầng DevOps. Mỗi hành động đẩy mã nguồn lên Git (Push) hoặc tạo yêu cầu hợp nhất (Merge Request) có thể kích hoạt tự động các chu kỳ kiểm thử và triển khai thông qua:

  • GitHub Actions
  • GitLab CI/CD
  • Jenkins
  • ArgoCD, FluxCD (áp dụng mô hình GitOps tiên tiến)

Git Server Self-hosted

Bên cạnh việc sử dụng các dịch vụ đám mây công cộng, nhiều tổ chức tự vận hành hệ thống Git Server nội bộ để bảo mật dữ liệu tuyệt đối:

  • GitHub Enterprise hoặc GitLab Self-managed cho quy mô doanh nghiệp lớn.
  • Gitea hoặc Forgejo cho các hệ thống gọn nhẹ, tiêu tốn ít tài nguyên nhưng vẫn đầy đủ tính năng cốt lõi.

Cài Đặt Git Và Cấu Hình Ban Đầu

Để bắt đầu làm việc, bạn cần cài đặt Git lên hệ điều hành đang sử dụng.

Cài Git trên Windows

Trên Windows, cách nhanh nhất hiện nay là sử dụng trình quản lý gói Winget trực tiếp từ Command Prompt hoặc PowerShell:

winget install Git.Git

Hoặc bạn có thể tải bộ cài đặt giao diện truyền thống .exe từ trang chủ git-scm.com.

Cài Git trên Ubuntu/Debian

Mở Terminal của bạn và chạy các lệnh sau để cập nhật hệ thống và cài đặt Git:

sudo apt update
sudo apt install git -y

Cài Git trên CentOS/Rocky Linux/AlmaLinux

Với các bản phân phối Linux sử dụng trình quản lý gói DNF/YUM, bạn dùng lệnh sau:

sudo dnf install git -y

Kiểm tra phiên bản Git

Sau khi cài đặt xong, hãy xác minh xem hệ thống đã nhận diện được Git hay chưa bằng lệnh:

git --version

Cấu hình người dùng Git

Đây là bước bắt buộc ngay sau khi cài đặt. Thông tin này sẽ được đính kèm vào mọi commit mà bạn thực hiện để mọi người biết ai là tác giả của thay đổi đó.

git config --global user.name "Nguyen Van A"
git config --global user.email "[email protected]"

Kiểm tra cấu hình

Bạn có thể liệt kê lại toàn bộ các cấu hình đã thiết lập bằng lệnh:

git config --list

Hiểu Git Workflow Trước Khi Học Lệnh Git

Trước khi gõ các dòng lệnh, việc nắm rõ cách thức luân chuyển dữ liệu trong Git sẽ giúp bạn tránh được những nhầm lẫn không đáng có.

Git Workflow hoạt động như thế nào?

Quy trình quản lý file của Git trải qua 4 khu vực chính theo sơ đồ sau:

[ Working Directory ] ──( git add )──> [ Staging Area ] ──( git commit )──> [ Local Repository ] ──( git push )──> [ Remote Repository ]

Ý nghĩa từng thành phần

  • Working Directory (Thư mục làm việc): Nơi chứa các file thực tế trên ổ cứng máy tính mà bạn đang trực tiếp chỉnh sửa bằng code editor (như VS Code, Cursor).
  • Staging Area (Khu vực chờ): Nơi chuẩn bị dữ liệu. Khi bạn thay đổi một file và muốn lưu lại, bạn đưa nó vào đây để Git ghi nhận rằng file này đã sẵn sàng để tạo phiên bản mới.
  • Local Repository (Kho lưu trữ cục bộ): Nơi lưu trữ tất cả lịch sử và các phiên bản đã commit trực tiếp trên máy của bạn (nằm trong thư mục ẩn .git).
  • Remote Repository (Kho lưu trữ từ xa): Kho chứa mã nguồn nằm trên các máy chủ đám mây hoặc máy chủ nội bộ (như GitHub, GitLab, server riêng) giúp đồng bộ hóa với các thành viên khác trong nhóm.

Quy trình làm việc Git cơ bản

  1. Tạo/Chỉnh sửa file trong thư mục làm việc (Working Directory).
  2. Dùng lệnh git add để chuyển các file muốn lưu trữ sang khu vực chờ (Staging Area).
  3. Dùng lệnh git commit để lưu vĩnh viễn trạng thái đó vào kho lưu trữ cục bộ (Local Repository).
  4. Dùng lệnh git push để đẩy các thay đổi lên kho chứa trực tuyến (Remote Repository).
  5. Thành viên khác trong nhóm sẽ dùng git pull để cập nhật các thay đổi mới nhất về máy của họ.

Các Lệnh Git Cơ Bản Quan Trọng Nhất

git init – Khởi tạo Repository

Lệnh này dùng để tạo một kho lưu trữ Git mới ngay tại thư mục hiện hành. Sau khi chạy, một thư mục ẩn có tên .git sẽ được khởi tạo để theo dõi mọi biến động của dự án.

git init
  • Khi nào dùng? Khi bạn bắt đầu một dự án mới hoàn toàn từ máy cục bộ và muốn quản lý nó bằng Git.

git clone – Sao chép Repository

Dùng để tải một dự án đã có sẵn từ Remote Repository về máy tính của bạn.

git clone https://github.com/example/project.git
  • Ví dụ thực tế: Bạn có thể clone từ các nền tảng đám mây công cộng (GitHub, GitLab) hoặc các Git Server nội bộ của doanh nghiệp bằng cả giao thức HTTPS hoặc SSH.

git status – Kiểm tra trạng thái

Đây là lệnh được sử dụng nhiều nhất để xem trạng thái hiện tại của thư mục làm việc và khu vực chờ.

git status

Các trạng thái chính của file mà bạn thường gặp bao gồm:

  • Untracked: File mới được tạo và chưa từng được Git theo dõi.
  • Modified: File đã được theo dõi nhưng có sự thay đổi nội dung chưa đưa vào Staging Area.
  • Staged: File đã được đưa vào Staging Area bằng lệnh git add, sẵn sàng cho lượt commit tiếp theo.
  • Committed: Các thay đổi đã được lưu an toàn vào cơ sở dữ liệu của Git.

git add – Đưa file vào Staging Area

Lệnh này giúp chuyển các thay đổi từ thư mục làm việc vào khu vực chờ (Staging Area).

  • Thêm một file cụ thể:
    git add filename.txt
    
  • Thêm toàn bộ các file có thay đổi trong thư mục hiện tại:
    git add .
    

git commit – Tạo phiên bản lưu trữ

Ghi nhận các thay đổi đang nằm trong Staging Area vào lịch sử của Local Repository.

git commit -m "Add login page feature"
  • Quy tắc đặt commit message tốt: Hãy viết ngắn gọn, súc tích và thể hiện rõ hành động ở thể chủ động (ví dụ: Add...Fix...Update... thay vì viết quá chung chung như Fix bugUpdate code).

git log – Xem lịch sử commit

Hiển thị danh sách các commit đã được thực hiện trong dự án theo thứ tự thời gian ngược (mới nhất ở trên cùng).

git log

Để xem lịch sử dưới dạng rút gọn trên một dòng cho dễ theo dõi, bạn sử dụng:

git log --oneline

git diff – So sánh thay đổi

Giúp bạn xem chi tiết những dòng code nào đã bị xóa đi hoặc được thêm mới trước khi quyết định đưa chúng vào Staging Area hoặc Commit.

  • So sánh sự khác biệt giữa thư mục làm việc và Staging Area:
    git diff
    
  • So sánh sự khác biệt giữa Staging Area và commit gần nhất:
    git diff --staged
    

Nếu bạn đang lưu trữ source code, triển khai môi trường test hoặc xây dựng Git Server nội bộ cho nhóm phát triển, một VPS ổn định sẽ giúp kiểm soát toàn bộ hạ tầng thay vì phụ thuộc hoàn toàn vào dịch vụ bên thứ ba. Tham khảo dịch vụ thuê VPS giá rẻ tại InterData với CPU thế hệ mới, SSD NVMe U.2, mạng tốc độ cao và chi phí tối ưu để triển khai GitLab, Gitea, CI/CD hoặc môi trường DevOps riêng

Các Lệnh Git Branch Cơ Bản

Phân nhánh (Branching) là tính năng mạnh mẽ giúp bạn tách biệt các phần việc khác nhau (như sửa lỗi, phát triển tính năng mới) mà không làm ảnh hưởng đến luồng code chính (nhánh main hoặc master).

git branch – Quản lý branch

  • Liệt kê toàn bộ các nhánh hiện có ở local:
    git branch
    
  • Tạo một nhánh mới có tên là feature-login:
    git branch feature-login
    

git switch

Dùng để chuyển đổi qua lại giữa các nhánh một cách an toàn và rõ nghĩa.

git switch feature-login

Bạn cũng có thể vừa tạo nhánh mới vừa chuyển sang nhánh đó ngay lập tức bằng lệnh: git switch -c feature-register

git checkout

Đây là lệnh truyền thống trước khi lệnh git switch ra đời, tuy nhiên nó vẫn được sử dụng rất nhiều:

git checkout feature-login
  • Sự khác nhau giữa git switch và git checkout: Lệnh checkout là một lệnh đa năng, vừa dùng để chuyển nhánh, vừa dùng để khôi phục các file cũ. Điều này đôi khi gây bối rối cho người mới. Kể từ các phiên bản Git gần đây, cộng đồng khuyến khích dùng switch thuần túy cho việc chuyển nhánh và restore để khôi phục file nhằm phân tách rõ ràng chức năng.

git merge – Hợp nhất các nhánh

Khi đã hoàn thành code trên nhánh phụ (ví dụ feature-login), bạn cần gộp những thay đổi đó vào nhánh chính (ví dụ main). Đầu tiên bạn chuyển về nhánh main, sau đó chạy lệnh merge:

git switch main
git merge feature-login

Trong thực tế, việc merge thường diễn ra dưới hai hình thức:

  • Fast-forward merge: Xảy ra khi nhánh chính không có thêm commit mới nào kể từ khi bạn tách nhánh phụ. Git chỉ đơn giản là “tua nhanh” con trỏ của nhánh chính đến commit mới nhất của nhánh phụ.
  • Three-way merge: Xảy ra khi cả nhánh chính và nhánh phụ đều có những commit mới độc lập sau khi tách nhánh. Git sẽ tự động tạo một commit hợp nhất (merge commit) để gắn kết lịch sử của cả hai nhánh lại với nhau.

git branch -d – Xóa branch

Khi một tính năng đã được kiểm tra và merge thành công vào nhánh chính, bạn nên xóa nhánh phụ đó đi để tránh làm rối danh sách nhánh:

git branch -d feature-login

Lưu ý: Nếu nhánh phụ chưa được merge nhưng bạn vẫn muốn xóa bỏ hoàn toàn, hãy dùng lệnh cưỡng chế là git branch -D feature-login.


Làm Việc Với Remote Repository

Remote Repository là gì?

Remote Repository là kho lưu trữ được host trên internet hoặc mạng nội bộ. Nó đóng vai trò là nơi trung chuyển code giúp các thành viên trong dự án dễ dàng chia sẻ công việc với nhau.

git remote

Xem danh sách các kết nối remote hiện có trong dự án của bạn:

git remote -v

git remote add

Liên kết kho lưu trữ cục bộ của bạn với một kho lưu trữ trực tuyến:

git remote add origin https://github.com/example/project.git

(Trong đó origin là tên mặc định thường dùng để đại diện cho máy chủ remote chính).

git push

Đẩy toàn bộ commit mới từ máy của bạn lên server trực tuyến:

git push origin main

git pull

Tải các thay đổi mới nhất từ server về máy cục bộ và tự động hợp nhất (merge) chúng vào nhánh hiện tại của bạn:

git pull origin main

git fetch

Chỉ tải về thông tin và các commit mới từ server nhưng không tự động merge vào code hiện tại của bạn. Bạn có thể kiểm tra các thay đổi này trước khi quyết định gộp chúng vào.

git fetch origin

So sánh git pull và git fetch

Lệnh Tải dữ liệu mới từ Remote Tự động hợp nhất (Merge) vào code hiện tại
git fetch Không
git pull Có (Tương đương với git fetch + git merge)

GitHub, GitLab Và Git Server Riêng

Khi làm việc với Git, bạn sẽ cần một nơi để lưu trữ mã nguồn trực tuyến. Ba giải pháp phổ biến nhất hiện nay bao gồm:

GitHub là gì?

GitHub là nền tảng lưu trữ mã nguồn chạy trên nền Git lớn nhất thế giới, thuộc sở hữu của Microsoft. Đây là điểm hẹn lý tưởng cho các dự án mã nguồn mở và cộng đồng lập trình viên toàn cầu nhờ các tính năng tương tác xã hội mạnh mẽ.

GitLab là gì?

GitLab là một nền tảng quản lý vòng đời phát triển phần mềm toàn diện. Ngoài việc lưu trữ mã nguồn, GitLab nổi tiếng với hệ thống CI/CD cực kỳ mạnh mẽ tích hợp sẵn, hỗ trợ cả hai hình thức sử dụng đám mây (Cloud) và tự vận hành (Self-hosted).

Khi nào nên dùng GitHub?

  • Bạn muốn phát triển các dự án mã nguồn mở, chia sẻ với cộng đồng.
  • Dự án cá nhân cần sự tiện lợi, nhanh chóng, không muốn tốn công cấu hình hạ tầng.
  • Cần tận dụng hệ sinh thái phong phú từ GitHub Actions và cộng đồng lập trình viên đông đảo.

Khi nào nên dùng GitLab?

  • Dự án doanh nghiệp cần quy trình CI/CD tích hợp chặt chẽ từ khâu lập trình đến khâu deploy.
  • Cần quản lý dự án chi tiết với các công cụ Issue Tracker, Wiki chuyên sâu.

Khi nào nên Self-host Git Server?

Việc tự triển khai một máy chủ Git riêng (Sử dụng GitLab Self-managed, Gitea hoặc Forgejo) là lựa chọn tối ưu khi:

  • Yêu cầu bảo mật cao: Mã nguồn là tài sản trí tuệ cốt lõi, không muốn lưu trữ trên server của bên thứ ba.
  • Tuân thủ quy định dữ liệu (Compliance): Các quy định khắt khe của ngành tài chính, y tế hoặc chính phủ yêu cầu dữ liệu phải nằm trong nước hoặc hạ tầng riêng biệt.
  • Tối ưu hóa chi phí: Khi quy mô đội ngũ phát triển tăng lên, chi phí bản quyền license cho mỗi user trên Cloud có thể rất lớn. Tự host trên VPS riêng giúp bạn chủ động kiểm soát chi phí dựa trên phần cứng sử dụng.

Bảng so sánh các giải pháp lưu trữ Git

Tiêu chí GitHub GitLab (Cloud) Self-host Git (GitLab, Gitea)
Quản lý hệ thống Do Microsoft quản lý Do GitLab quản lý Tự quản lý và vận hành
Chi phí Miễn phí/Trả phí theo user Miễn phí/Trả phí theo user Phụ thuộc vào chi phí thuê hạ tầng VPS/Server
Kiểm soát dữ liệu Trung bình Trung bình Cao nhất (Toàn quyền kiểm soát)
Phù hợp với Cá nhân, Mã nguồn mở Đội ngũ cần CI/CD tích hợp Doanh nghiệp ưu tiên bảo mật và tự chủ hạ tầng

Nhiều đội ngũ phát triển lựa chọn triển khai GitLab Self-Managed hoặc Gitea trên VPS riêng để kiểm soát mã nguồn, runner CI/CD, backup và quyền truy cập nội bộ. InterData cung cấp VPS sử dụng CPU đời mới, SSD NVMe U.2, băng thông lớn và chi phí hợp lý, phù hợp để vận hành Git Server, Docker Registry, CI/CD Pipeline hoặc môi trường staging cho dự án phần mềm.

Hoàn Tác Và Khôi Phục Thay Đổi Trong Git

Trong quá trình làm việc, việc code lỗi hoặc muốn quay lại một trạng thái trước đó là điều hết sức bình thường. Git cung cấp các công cụ mạnh mẽ để bạn sửa sai.

git restore

Dùng để hủy bỏ những thay đổi chưa commit trong thư mục làm việc của bạn, đưa file về trạng thái ở commit gần nhất.

git restore index.html

git reset

Lệnh này dùng để di chuyển con trỏ HEAD (vị trí hiện tại của bạn trong lịch sử commit) về một commit cụ thể trong quá khứ. Lệnh này có 3 chế độ hoạt động chính:

  • --soft: Giữ nguyên các thay đổi của bạn trong thư mục làm việc và khu vực chờ (Staging Area). Bạn chỉ hủy bỏ hành động commit.
    git reset --soft HEAD~1
    

    (Quay lại trước thời điểm commit 1 bước)

  • --mixed (mặc định): Giữ lại các thay đổi trong thư mục làm việc nhưng loại bỏ chúng khỏi Staging Area.
    git reset HEAD index.html
    
  • --hard: Xóa sạch mọi thay đổi kể từ commit đó ở cả thư mục làm việc và khu vực chờ. Hãy cực kỳ cẩn thận khi sử dụng tùy chọn này vì bạn có thể mất vĩnh viễn những gì chưa commit.
    git reset --hard HEAD~1
    

git revert

Khác với reset (xóa bỏ lịch sử), revert tạo ra một commit mới chứa nội dung ngược lại hoàn toàn với commit mà bạn muốn hủy bỏ. Điều này giúp lịch sử commit của bạn luôn an toàn và không bị đứt gãy.

git revert <commit-id>

Nên dùng reset hay revert?

Tiêu chí git reset git revert
Bản chất Quay lui dòng thời gian, loại bỏ các commit sau mốc đó. Tạo ra một commit mới để đảo ngược thay đổi.
An toàn Nguy hiểm nếu commit đó đã được push lên remote chung. An toàn, không làm ảnh hưởng đến lịch sử của người khác.
Khuyên dùng Chỉ dùng cho các commit cục bộ (Local) chưa push. Dùng cho các commit đã push lên Remote dùng chung.

Các Lỗi Git Thường Gặp Và Cách Khắc Phục

Merge Conflict (Xung đột khi merge)

  • Nguyên nhân: Xảy ra khi hai nhánh khác nhau cùng chỉnh sửa một dòng code trong cùng một file, khiến Git không biết nên giữ lại phiên bản nào khi merge.
  • Cách khắc phục:
    1. Chạy lệnh git status để tìm các file bị xung đột.
    2. Mở file đó bằng Code Editor, tìm các phần được đánh dấu bằng ký hiệu <<<<<<<=======>>>>>>>.
    3. Thảo luận với đồng nghiệp hoặc tự chọn phần code đúng, xóa các ký hiệu đánh dấu đi.
    4. Lưu file, chạy git add <file> và thực hiện git commit để hoàn tất quá trình merge.

Detached HEAD

  • Nguyên nhân: Bạn chuyển sang xem code ở một commit cụ thể (bằng git checkout <commit-id>) thay vì xem ở một nhánh cụ thể. Lúc này mọi commit mới bạn tạo ra sẽ không thuộc về nhánh nào và dễ bị mất.
  • Cách khắc phục: Hãy nhanh chóng chuyển về nhánh làm việc an toàn bằng lệnh:
    git switch main
    

Rejected Push (Bị từ chối đẩy code)

  • Lỗi thường gặp: failed to push some refs to...
  • Nguyên nhân: Remote repository đang chứa những commit mới hơn so với máy cục bộ của bạn (do đồng nghiệp vừa đẩy lên).
  • Cách khắc phục: Bạn cần kéo các thay đổi mới nhất về máy của mình trước, giải quyết conflict (nếu có) rồi mới push lại:
    git pull origin <branch-name>
    # Sau khi xử lý xong các thay đổi
    git push origin <branch-name>
    

Authentication Failed (Lỗi xác thực)

  • Nguyên nhân: Kể từ năm 2021, GitHub và nhiều nền tảng đã loại bỏ việc xác thực bằng mật khẩu tài khoản thông thường khi dùng dòng lệnh.
  • Cách khắc phục: Bạn cần tạo Personal Access Token (PAT) trong phần cài đặt tài khoản của GitHub/GitLab và dùng token đó thay cho mật khẩu, hoặc chuyển sang cấu hình xác thực an toàn bằng SSH Key.

Branch Không Đồng Bộ

  • Nguyên nhân: Danh sách nhánh ở máy của bạn hiển thị những nhánh đã bị xóa trên Remote Server.
  • Cách khắc phục: Đồng bộ lại danh sách nhánh bằng cách dọn dẹp các nhánh “rác” không còn tồn tại trên server:
    git fetch --prune
    

Xóa nhầm commit

  • Nguyên nhân: Lỡ tay dùng lệnh git reset --hard khiến commit biến mất khỏi lịch sử hiển thị của git log.
  • Cách khắc phục: Đừng quá lo lắng, Git có một nhật ký lưu lại mọi hành động của bạn mang tên reflog. Hãy chạy:
    git reflog
    

    Tìm mã định danh <commit-id> của commit bị mất trong danh sách hiển thị, sau đó khôi phục lại bằng lệnh:

    git reset --hard <commit-id>
    

Git Cheat Sheet – Tổng Hợp Các Lệnh Git Thiết Yếu

Để tiện tra cứu nhanh trong quá trình làm việc, dưới đây là bảng tổng hợp các nhóm lệnh Git phổ biến nhất.

Bảng 1: Lệnh Git thiết yếu

Mục đích Lệnh sử dụng
Khởi tạo một kho lưu trữ cục bộ git init
Sao chép dự án từ xa về máy git clone <url>
Kiểm tra trạng thái các file git status
Đưa file vào khu vực chờ git add <file> hoặc git add .
Lưu phiên bản mới kèm thông điệp git commit -m "Thông điệp"
Đẩy code lên máy chủ từ xa git push origin <branch>
Tải code mới về máy và tự động gộp git pull origin <branch>

Bảng 2: Lệnh quản lý nhánh (Branch)

Mục đích Lệnh sử dụng
Xem danh sách nhánh hiện có git branch
Tạo một nhánh mới git branch <ten-nhanh>
Chuyển sang nhánh khác git switch <ten-nhanh>
Vừa tạo vừa chuyển sang nhánh mới git switch -c <ten-nhanh>
Hợp nhất nhánh phụ vào nhánh hiện tại git merge <ten-nhanh-phu>
Xóa một nhánh an toàn git branch -d <ten-nhanh>

Bảng 3: Hoàn tác và khôi phục (Undo)

Mục đích Lệnh sử dụng
Hủy bỏ các thay đổi chưa commit của file git restore <file>
Đưa file ra khỏi khu vực chờ (Staging) git reset HEAD <file>
Hủy commit, giữ lại code trong Working Directory git reset --soft HEAD~1
Hủy bỏ hoàn toàn commit và code mới nhất git reset --hard HEAD~1
Tạo commit đảo ngược thay đổi của commit cũ git revert <commit-id>

Kinh Nghiệm Sử Dụng Git Hiệu Quả

Việc sử dụng Git đúng cách sẽ giúp bạn giữ cho lịch sử dự án luôn sạch sẽ, dễ theo dõi và hạn chế tối đa các lỗi xung đột mã nguồn khi làm việc nhóm.

Commit thường xuyên

Nên thực hiện commit thường xuyên sau khi hoàn thành từng phần việc nhỏ, có tính độc lập. Tránh việc code liên tục cả ngày với hàng nghìn dòng rồi mới commit một lần, điều này khiến việc tìm và sửa lỗi trở nên cực kỳ phức tạp nếu có sự cố.

Viết commit message rõ ràng

Áp dụng các tiêu chuẩn viết commit message giúp đội ngũ của bạn dễ dàng đọc hiểu lịch sử dự án. Hai tiêu chuẩn phổ biến nhất là:

  • Conventional Commits: Định dạng cấu trúc rõ ràng như type(scope): description (ví dụ: feat(auth): add login validation).
  • Semantic Commits: Giúp phân loại rõ mục đích của commit:
    • feat: Tính năng mới.
    • fix: Sửa lỗi.
    • docs: Thay đổi tài liệu hướng dẫn.
    • style: Định dạng code (khoảng trắng, dấu chấm phẩy, không ảnh hưởng logic).
    • refactor: Tối ưu hóa cấu trúc code nhưng không thay đổi tính năng.
    • test: Viết thêm bộ kiểm thử.
    • chore: Các tác vụ vụn vặt khác (update thư viện, cấu hình build…).

Không commit file nhạy cảm

Tuyệt đối không đẩy các thông tin bảo mật lên các kho chứa chung. Các tệp tin cần tránh bao gồm:

  • Các file cấu hình môi trường chứa mật khẩu, API key (.env).
  • Khóa bảo mật cá nhân (id_rsa*.pem).
  • Các thư mục chứa thư viện tải về (như node_modules hay vendor).

Sử dụng .gitignore đúng cách

Hãy tạo một file có tên chính xác là .gitignore ở thư mục gốc của dự án. File này chứa danh sách các đường dẫn hoặc định dạng tệp tin mà bạn muốn Git bỏ qua, không theo dõi sự thay đổi của chúng.

Ví dụ nội dung file .gitignore cơ bản:

.env
node_modules/
dist/
*.log
.DS_Store

Luôn review trước khi push

Trước khi đẩy code lên remote server, hãy tập thói quen chạy các lệnh kiểm tra cuối cùng để chắc chắn bạn không đẩy nhầm code rác hoặc các file cấu hình tạm thời:

git status
git diff --staged

Backup repository quan trọng

Mặc dù Git là hệ thống phân tán và mỗi lập trình viên đều giữ một bản sao lịch sử, doanh nghiệp vẫn nên thiết lập các tác vụ sao lưu tự động (backup) định kỳ cho máy chủ Git trung tâm để đề phòng rủi ro mất mát phần cứng.


Bảo Mật Khi Sử Dụng Git

Những dữ liệu không nên commit

Như đã đề cập, việc vô tình lộ lọt mật khẩu cơ sở dữ liệu, API key hoặc thông tin khách hàng trên Git là một trong những nguyên nhân hàng đầu dẫn đến các vụ rò rỉ dữ liệu nghiêm trọng. Nếu lỡ commit nhầm, việc đơn giản là commit đè lên sẽ không giúp bạn xóa sạch thông tin đó vì nó vẫn tồn tại trong lịch sử commit cũ. Bạn sẽ phải sử dụng các công cụ chuyên dụng như git-filter-repo hoặc BFG Repo-Cleaner để làm sạch hoàn toàn lịch sử.

Quản lý secrets

Hãy tận dụng các công cụ quản lý thông tin bảo mật chuyên nghiệp thay vì lưu trữ dạng text thông thường trong code:

  • Sử dụng các hệ thống lưu trữ tập trung như HashiCorp Vault.
  • Sử dụng tính năng GitHub Secrets hoặc GitLab Variables để truyền các API key vào quy trình CI/CD một cách an toàn nhất.

SSH Key thay vì Password

Hãy thiết lập xác thực qua giao thức SSH thay vì HTTPS sử dụng mật khẩu/token thông thường. SSH Key sử dụng cặp khóa mã hóa công khai và bí mật giúp bạn kết nối an toàn với máy chủ Git mà không cần nhập lại mật khẩu mỗi lần đẩy code.

Kiểm tra lịch sử commit để tránh lộ dữ liệu

Bạn có thể tích hợp các công cụ tự động quét mã nguồn như GitGuardian hoặc TruffleHog vào quy trình commit cục bộ (sử dụng pre-commit hooks) để tự động ngăn chặn việc đẩy nhầm các chuỗi khóa bảo mật (secrets) lên server.


Một Số Câu Hỏi Thường Gặp

1. Git và GitHub có giống nhau không?

Không. Git là công cụ quản lý phiên bản chạy trực tiếp trên máy tính của bạn. Còn GitHub là một dịch vụ lưu trữ đám mây cung cấp giao diện web để bạn tải các kho lưu trữ Git lên đó và chia sẻ với mọi người. Bạn có thể sử dụng Git mà không cần GitHub, nhưng không thể sử dụng GitHub hiệu quả nếu thiếu Git.

2. Người mới nên học GitHub hay Git trước?

Bạn bắt buộc phải học sử dụng Git trước. Hiểu được các khái niệm cốt lõi của Git như commit, branch, merge sẽ giúp bạn nhanh chóng làm quen và khai thác tốt mọi tính năng trên giao diện của GitHub hoặc GitLab.

3. Git có miễn phí không?

Hoàn toàn miễn phí. Git là phần mềm mã nguồn mở và bạn có thể tự do tải về, cài đặt và sử dụng cho mọi mục đích cá nhân lẫn thương mại.

4. GitLab có thay thế GitHub được không?

Có. Cả hai đều cung cấp các tính năng cốt lõi là lưu trữ mã nguồn dựa trên Git. GitLab thậm chí còn được đánh giá rất cao ở mảng CI/CD tự động và khả năng cho phép người dùng tự cài đặt máy chủ riêng (Self-hosted).

5. git pull và git fetch khác nhau thế nào?

  • git fetch chỉ tải các commit mới từ server về máy nhưng không can thiệp vào code bạn đang viết.
  • git pull vừa tải dữ liệu mới về vừa tự động thực hiện lệnh merge để gộp mã nguồn mới vào code hiện tại của bạn.

6. Có nên dùng Git cho dự án cá nhân?

Rất nên dùng. Kể cả khi làm việc một mình, Git vẫn giúp bạn lưu lại các mốc phát triển quan trọng của dự án, thử nghiệm các tính năng mới trên các nhánh phụ một cách an toàn và dễ dàng đồng bộ code giữa máy tính ở nhà và laptop cá nhân.

7. Git có chạy trên VPS được không?

Có. Bạn hoàn toàn có thể thuê một VPS Linux riêng để cài đặt Git và cấu hình nó làm máy chủ lưu trữ trung tâm cho đội ngũ phát triển của mình.

8. Có thể tự xây dựng Git Server riêng không?

Có. Bằng cách sử dụng các ứng dụng mã nguồn mở như Gitea, Forgejo hoặc GitLab Self-managed cài đặt trên một máy chủ VPS riêng biệt, bạn sẽ sở hữu một hệ thống Git Server an toàn, bảo mật tuyệt đối với chi phí tối ưu nhất.


Việc nắm vững các lệnh Git cơ bản là viên gạch đầu tiên giúp bạn vững bước trên con đường phát triển phần mềm chuyên nghiệp. Từ việc khởi tạo kho chứa, quản lý nhánh cho đến việc phối hợp đồng bộ mã nguồn với Remote Server, tất cả đều là những kỹ năng không thể thiếu đối với mọi Developer, DevOps Engineer và SysAdmin ngày nay.

Hãy bắt đầu bằng việc thực hành hàng ngày thông qua các lệnh đơn giản như git statusgit add và git commit. Sự nhuần nhuyễn trong việc sử dụng dòng lệnh sẽ giúp bạn làm chủ mã nguồn của mình một cách chủ động nhất. Chúc các bạn thành công trên con đường học tập và làm việc với Git!