Skip to main content

Git và GitHub cho người mới bắt đầu

Posted on:  at 
Tutorials
Picture

Đã bao giờ bạn vô tình làm các dòng code rối tung lên hay vô tình xóa các file đi và chương trình gặp lỗi. Vậy làm sao để hoàn nguyên code về trạng thái cũ, chẳng nhẽ lúc nào cũng tạo bản backup, 10 lần backup là 10 bản.

Khi đó, bạn ước gì có thể quay ngược thời gian, trở về trạng thái code “ổn định” trước đó. Nhưng nếu mỗi lần chỉnh sửa đều phải tạo một bản backup riêng – project_v1, project_v2_final, project_v3_final_real_this_time,... – thì chẳng mấy chốc thư mục của bạn sẽ biến thành một bãi chiến trường.

Vấn đề không nằm ở việc bạn có cẩn thận hay không. Vấn đề là: code luôn thay đổi, và lập trình viên giỏi không phải là người không bao giờ sai, mà là người biết cách phục hồi sau khi sai.

Giải pháp là gì?

Chính là Git – hệ thống quản lý phiên bản mã nguồn phổ biến nhất thế giới.

Intro

Trong bài viết này, mình sẽ giới thiệu cho bạn Git và GitHub – không lý thuyết dài dòng, không khô khan. Chỉ tập trung vào tình huống thực tế mà bạn chắc chắn sẽ gặp khi code, và cách Git giúp bạn xử lý nó gọn gàng.

🔍 Git là gì? Vì sao nên dùng?

Git là một hệ thống quản lý phiên bản phân tán (Distributed Version Control System). Nghe có vẻ phức tạp, nhưng thực chất Git làm đúng một việc: giúp bạn lưu lại từng lần thay đổi trong mã nguồn, để bạn có thể dễ dàng:

Quay lại bất kỳ thời điểm nào trước đó.

  • So sánh sự khác biệt giữa các phiên bản.

  • Làm việc nhóm mà không “giẫm lên code của nhau”.

  • Tạo các nhánh (branch) để thử nghiệm tính năng mới mà không ảnh hưởng đến phiên bản chính.

⚠️ Không có Git, chuyện gì xảy ra?

Hãy tưởng tượng bạn đang làm một project cá nhân hoặc làm việc cùng nhóm. Bạn vừa sửa vài dòng code tưởng là hay, nhưng ngay sau đó mọi thứ đổ bể. Lúc này:

  • Không có bản backup.

  • Không nhớ rõ mình đã thay đổi file nào.

  • Không biết rollback bằng cách nào ngoài… Ctrl+Z vô vọng.

  • Hoặc tệ hơn: bạn clone code từ đồng nghiệp nhưng chẳng biết họ đã sửa gì – merge vào thì xung đột, mà bỏ thì tiếc.

Đây chính là những cơn ác mộng mà Git sinh ra để giải quyết triệt để.

Vậy GitHub là gì?

Nếu Git là cái máy ảnh chụp lại từng khoảnh khắc của project bạn, thì GitHub là album online – nơi bạn lưu trữ, chia sẻ, cộng tác với cả team (hoặc cả thế giới) dễ dàng, an toàn và có kiểm soát.

🚀 Cài đặt Git - Bước đầu tiên

Trên Windows:

  1. Tải Git từ git-scm.com
  2. Cài đặt với tùy chọn mặc định
  3. Mở Command Prompt hoặc Git Bash

Trên macOS:

# Sử dụng Homebrew (khuyến nghị)
brew install git

# Hoặc tải từ git-scm.com

Trên Linux (Ubuntu/Debian):

sudo apt update
sudo apt install git

Kiểm tra cài đặt:

git --version

⚙️ Cấu hình Git lần đầu

Trước khi bắt đầu, Git cần biết bạn là ai:

git config --global user.name "Tên của bạn"
git config --global user.email "email@example.com"

Lưu ý: Email này nên trùng với email GitHub của bạn để kết nối được.

📖 Git Workflow Cơ Bản

Các khái niệm quan trọng:

  • Repository (Repo): Thư mục chứa project và lịch sử thay đổi
  • Working Directory: Thư mục làm việc hiện tại
  • Staging Area: Nơi chuẩn bị các thay đổi trước khi commit
  • Commit: Một "snapshot" của code tại thời điểm cụ thể

Workflow cơ bản:

  1. Modify: Thay đổi file
  2. Add: Đưa thay đổi vào staging area
  3. Commit: Lưu snapshot
  4. Push: Đẩy lên remote repository (GitHub)

🛠️ Các lệnh Git thông dụng nhất

Bắt đầu với Git:

# Tạo repository mới
git init

# Clone repository từ GitHub
git clone https://github.com/username/repository.git

Làm việc hàng ngày:

# Xem trạng thái hiện tại
git status

# Thêm file vào staging area
git add filename.js
git add .  # Thêm tất cả file

# Commit thay đổi
git commit -m "Mô tả ngắn gọn về thay đổi"

# Xem lịch sử commit
git log
git log --oneline  # Version ngắn gọn hơn

Đồng bộ với GitHub:

# Đẩy code lên GitHub
git push origin main

# Kéo thay đổi mới nhất từ GitHub
git pull origin main

🌿 Làm việc với Branch

Branch là một trong những tính năng mạnh nhất của Git. Nó cho phép bạn tách ra một "dòng phát triển" riêng mà không ảnh hưởng đến code chính.

Khi nào cần Branch?

  • Phát triển tính năng mới
  • Sửa bug
  • Thử nghiệm ý tưởng mới
  • Làm việc song song nhiều task

Các lệnh Branch cơ bản:

# Tạo branch mới
git branch feature-login

# Chuyển sang branch khác
git checkout feature-login

# Tạo và chuyển branch cùng lúc
git checkout -b feature-login

# Xem tất cả branch
git branch

# Merge branch vào main
git checkout main
git merge feature-login

# Xóa branch sau khi merge
git branch -d feature-login

🔄 Xử lý xung đột (Merge Conflicts)

Khi nhiều người sửa cùng một file, Git có thể không biết nên giữ phiên bản nào. Đây là lúc xung đột xảy ra.

Cách giải quyết:

  1. Git sẽ đánh dấu phần xung đột trong file:
<<<<<<< HEAD
// Code của bạn
=======
// Code từ branch khác
>>>>>>> feature-branch
  1. Sửa thủ công, giữ lại code đúng
  2. Xóa các dấu hiệu <<<<<<<, =======, >>>>>>>
  3. Add và commit lại

🐙 GitHub - Nâng tầm cộng tác

Tạo Repository trên GitHub:

  1. Đăng nhập GitHub
  2. Click nút "New repository"
  3. Đặt tên, chọn public/private
  4. Tạo

Kết nối Local với GitHub:

# Thêm remote origin
git remote add origin https://github.com/username/repository.git

# Push lần đầu
git push -u origin main

Pull Request - Cách cộng tác chuyên nghiệp:

  1. Fork repository gốc
  2. Clone về máy local
  3. Tạo branch mới cho tính năng
  4. Commit và push lên fork của bạn
  5. Tạo Pull Request trên GitHub
  6. Code review và merge

🆘 Các tình huống "Cứu cánh"

1. Commit nhầm - muốn hoàn tác:

# Hoàn tác commit cuối (giữ thay đổi)
git reset --soft HEAD~1

# Hoàn tác commit và xóa thay đổi
git reset --hard HEAD~1

2. File bị xóa nhầm:

# Khôi phục file từ commit cuối
git checkout HEAD -- filename.js

3. Quên add file trước commit:

# Thêm file vào commit cuối
git add forgotten-file.js
git commit --amend --no-edit

4. Xem ai đã sửa file này:

git blame filename.js

💡 Tips và Tricks

1. .gitignore - Những file không nên commit:

Tạo file .gitignore để loại trừ:

node_modules/
.env
*.log
dist/
.DS_Store

2. Commit message hay:

  • Sử dụng tiếng Anh
  • Bắt đầu bằng động từ: "Add", "Fix", "Update"
  • Ngắn gọn nhưng đủ ý
  • Ví dụ: "Fix login validation bug"

3. Alias để gõ nhanh hơn:

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm commit

🎯 Workflow thực tế cho Team

Git Flow - Mô hình phổ biến:

  1. main/master: Code production, luôn stable
  2. develop: Code tích hợp, chuẩn bị release
  3. feature branches: Phát triển tính năng mới
  4. release branches: Chuẩn bị phát hành
  5. hotfix branches: Sửa bug khẩn cấp

Quy trình làm việc:

  1. Tạo branch từ develop
  2. Code tính năng mới
  3. Push và tạo Pull Request
  4. Code review
  5. Merge vào develop
  6. Test và merge vào main khi ready

🚨 Lỗi thường gặp và cách sửa

1. "fatal: not a git repository"

Nguyên nhân: Chưa init git hoặc không ở thư mục đúng Giải pháp: git init hoặc cd vào thư mục đúng

2. "Permission denied (publickey)"

Nguyên nhân: Chưa cấu hình SSH key với GitHub Giải pháp: Sử dụng HTTPS thay vì SSH, hoặc tạo SSH key

3. "Your branch is ahead of origin/main"

Nguyên nhân: Có commit local chưa push Giải pháp: git push origin main

🎓 Kết luận

Git và GitHub không chỉ là công cụ - chúng là "siêu năng lực" của mọi developer. Với Git, bạn không còn lo lắng về việc mất code, không còn sợ thử nghiệm tính năng mới, và có thể cộng tác với team một cách chuyên nghiệp.

Hành động ngay hôm nay:

  1. Cài đặt Git
  2. Tạo tài khoản GitHub
  3. Thực hành với project nhỏ
  4. Dần dần áp dụng vào dự án thực tế

Remember: "Lập trình viên giỏi không phải là người không bao giờ sai, mà là người biết cách phục hồi sau khi sai."

Chúc bạn code vui vẻ! 🚀


Bài viết này sẽ được cập nhật thường xuyên. Nếu bạn có câu hỏi hoặc suggestion, hãy comment bên dưới nhé!