Developer Tools

Git & GitHub
Cheat Sheet

Hướng dẫn từ số 0 cho người mới: cài đặt Git, cấu hình, commit, branch, pull request, đồng bộ với team và xử lý conflict. Kèm GitHub CLI (gh).

git 2.x
Nền tảng

Git vs GitHub — khác nhau thế nào?

Git là công cụ quản lý phiên bản chạy trên máy bạn — theo dõi mọi thay đổi của code. GitHub là dịch vụ lưu trữ repo Git trên cloud để backup, chia sẻ và làm việc nhóm.

Repository (repo) Thư mục dự án được Git theo dõi. Local (máy bạn) ↔ Remote (GitHub).
Commit Một "ảnh chụp" thay đổi kèm mô tả. Là điểm mốc bạn có thể quay lại.
Branch Nhánh làm việc song song. Code tính năng mới mà không đụng nhánh chính.
Pull Request (PR) Đề nghị merge branch của bạn vào nhánh chính, để team review trước.
Hiểu bằng hình

Bản đồ Git — code của bạn đi qua 4 vùng

Mỗi lệnh Git chỉ là chuyển code từ vùng này sang vùng khác. Nhìn bản đồ dưới đây một lần là hiểu hầu hết lệnh thường dùng.

Chiều đi lên (add → commit → push) Chiều hoàn tác / kéo về (restore, pull…)

Vòng đời một file — git status báo gì?

Một file luôn ở một trong các trạng thái sau. git status chính là đang cho bạn biết file đang ở đâu.

Untracked File mới, Git chưa theo dõi
sửa / tạo
Modified Đã đổi, chưa stage
git add
Staged Sẵn sàng để commit
git commit
Committed Đã lưu vào lịch sử
Getting Started

Cài đặt & cấu hình lần đầu

1

Cài Git

brew install git

macOS. Windows & Ubuntu xem phần bên dưới ↓

2

Khai báo danh tính

git config --global user.name "Ten Ban"
git config --global user.email "you@email.com"

Tên & email này gắn vào mọi commit

3

Đăng nhập GitHub

gh auth login

Cài GitHub CLI: brew install gh

Cài đặt

Cài Git & GitHub CLI theo hệ điều hành

Windowswinget

Cách nhanh nhất — mở PowerShell hoặc Command Prompt:

winget install --id Git.Git -e
winget install --id GitHub.cli -e

Không có winget? Tải bộ cài tại git-scm.com/download/win và cli.github.com

macOSHomebrew

Cần Homebrew (brew.sh):

brew install git
brew install gh

Hoặc gõ git lần đầu, macOS sẽ mời cài Xcode Command Line Tools

Ubuntu / Debianapt

Terminal:

sudo apt update
sudo apt install git gh

Bản gh cũ? Xem hướng dẫn repo chính thức tại github.com/cli/cli

Kiểm traMọi HĐH

Cài xong, xác nhận bằng cách xem phiên bản:

git --version
gh --version

Ra số phiên bản là thành công

Lưu ý riêng cho Windows

Dùng Git Bash Bộ cài Git tặng kèm Git Bash — dùng nó thay vì CMD để chạy được lệnh giống macOS/Linux.
Line endings (CRLF) Chạy git config --global core.autocrlf true để tránh cảnh báo LF/CRLF khi làm chung với team Mac/Linux.
Lưu mật khẩu Windows có sẵn Git Credential Manager — đăng nhập GitHub một lần, các lần sau khỏi nhập lại.
Đường dẫn Trong Git Bash dùng /c/Users/ban/du-an thay cho C:\Users\ban\du-an.
Reference

Lệnh Git thường dùng

Tạo & lấy repo

git initBiến thư mục hiện tại thành repo
git clone <url>Tải repo từ GitHub về máy
git clone <url> tenClone vào thư mục tên khác
gh repo clone user/repoClone bằng GitHub CLI

Thay đổi hàng ngày

git statusXem file nào đã đổi
git add .Stage tất cả thay đổi
git add file.tsStage một file cụ thể
git commit -m "msg"Lưu commit kèm mô tả
git commit -am "msg"Add + commit file đã track
git diffXem chi tiết thay đổi chưa stage

Branch (nhánh)

git branchLiệt kê các branch
git switch -c tenTạo + chuyển sang branch mới
git switch mainChuyển về branch main
git merge tenGộp branch "ten" vào branch hiện tại
git branch -d tenXóa branch đã merge

Đồng bộ với GitHub

git pushĐẩy commit lên remote
git push -u origin tenPush branch mới lần đầu
git pullKéo thay đổi mới nhất về
git fetchTải update nhưng chưa merge
git remote -vXem địa chỉ remote

Xem lịch sử

git logDanh sách commit
git log --onelineMỗi commit một dòng, gọn
git log --graphHiển thị dạng cây branch
git show <hash>Chi tiết một commit
git blame fileAi sửa dòng nào, khi nào

Sửa lỗi & hoàn tác

git restore fileBỏ thay đổi chưa stage của file
git restore --staged fileUn-stage (bỏ khỏi git add)
git commit --amendSửa commit vừa tạo
git revert <hash>Tạo commit đảo ngược (an toàn)
git reset --soft HEAD~1Hủy commit cuối, giữ code
git stashCất tạm thay đổi để làm việc khác
GitHub CLI

Lệnh gh

GitHub CLI cho phép tạo repo, mở PR, review... ngay trong terminal — không cần vào web.

Repository

gh repo createTạo repo mới (interactive)
gh repo view --webMở repo trên trình duyệt
gh repo forkFork repo về tài khoản bạn

Pull Request

gh pr createMở PR từ branch hiện tại
gh pr listDanh sách PR đang mở
gh pr checkout <số>Lấy PR của người khác về test
gh pr mergeMerge PR

Issue

gh issue createTạo issue mới
gh issue listDanh sách issue
gh issue view <số>Xem chi tiết issue

Tài khoản

gh auth loginĐăng nhập GitHub
gh auth statusKiểm tra trạng thái đăng nhập
gh auth logoutĐăng xuất
Setup

File cấu hình quan trọng

.gitignoreBỏ qua file

Liệt kê file/thư mục Git KHÔNG track (node_modules, .env, build...).

node_modules/
.env
dist/
.DS_Store
.git/configRepo config

Cấu hình riêng cho repo này: remote, branch, user.

git config user.email "..."
git remote set-url origin <url>
~/.gitconfigGlobal

Cấu hình toàn máy: tên, email, alias, editor mặc định.

git config --global core.editor "code --wait"
git config --global init.defaultBranch main
README.mdTài liệu

File giới thiệu repo, hiển thị ngay trên trang GitHub.

# Ten Du An
Mo ta ngan gon, cach cai dat, cach chay.
Best Practices

Golden Rules

1

Commit nhỏ & thường xuyên

Mỗi commit làm một việc rõ ràng. Đừng dồn 20 thay đổi vào một commit — khi có lỗi rất khó tìm và revert.

2

Commit message có ý nghĩa

Viết cái gì đã đổi & tại sao, không phải "update", "fix". Dùng format: type: mô tả.

feat: them nut dang nhap Google
fix: sua loi redirect sau khi logout
3

Pull trước khi Push

Luôn git pull để lấy code mới nhất của team trước khi push. Tránh conflict và ghi đè công sức người khác.

4

Không code trực tiếp trên main

Tạo branch riêng cho mỗi tính năng/fix. Merge vào main qua Pull Request để team review trước.

git switch -c feature/login
5

Không commit file bí mật

Thêm .env, key, password vào .gitignore NGAY từ đầu. Đã push lên rồi thì coi như đã lộ.

6

Ưu tiên revert hơn reset

Với code đã push, dùng git revert (tạo commit đảo ngược, an toàn) thay vì reset (viết lại lịch sử, gây rối cho team).

Hiểu bằng hình

Branch & Pull Request — vì sao không code thẳng trên main

Bạn tách một nhánh riêng từ main để làm tính năng, commit thoải mái, rồi mở Pull Request để team review trước khi gộp lại. Main luôn sạch & chạy được.

main feature/dang-nhap git switch -c merge qua PR
main — nhánh chính, luôn ổn định feature branch — nơi bạn code tự do Pull Request — review rồi merge về main
Hiểu bằng hình

Giải phẫu một Conflict

Conflict xảy ra khi bạn & đồng đội sửa cùng một dòng. Git không tự chọn được nên chèn các dấu đánh dấu vào file — việc của bạn là chọn giữ phần nào rồi xóa các dấu đó.

<<<<<<< HEAD
const title = "Trang chủ";
=======
const title = "Home";
>>>>>>> main
Của BẠN Phần từ <<<<<<< HEAD tới ======= là code hiện tại của bạn.
Của TEAM Phần từ ======= tới >>>>>>> là code kéo về từ nhánh kia.
Cách sửa Giữ dòng bạn muốn, xóa 3 dấu <<< === >>>, rồi git add + git commit.
Workflows

Quy trình thực tế

Lấy code mới, sửa, commit, push
$git pull
# Lấy thay đổi mới nhất của team TRƯỚC KHI code
⌘... code, sửa file ...
# Làm việc bình thường trên editor
$git status
# Xem file nào đã đổi
$git add . && git commit -m "feat: them tinh nang X"
# Stage + commit với message rõ ràng
$git push
# Đẩy lên GitHub
Branch riêng → code → mở Pull Request
$git switch main && git pull
# Bắt đầu từ main mới nhất
$git switch -c feature/dang-nhap-google
# Tạo branch mới cho tính năng
$git add . && git commit -m "feat: dang nhap Google"
# Commit công việc trên branch
$git push -u origin feature/dang-nhap-google
# Push branch mới lên GitHub
>gh pr create --fill
# Mở Pull Request để team review
Lỡ tay? Cách quay lại an toàn
$git restore file.ts
# Bỏ thay đổi CHƯA commit của một file
$git restore --staged file.ts
# Lỡ git add? Un-stage lại
$git commit --amend -m "message dung"
# Sửa message hoặc nội dung commit VỪA tạo (chưa push)
$git reset --soft HEAD~1
# Hủy commit cuối, GIỮ lại code để sửa
$git revert <hash>
# Đảo ngược commit ĐÃ push — an toàn cho team
Khi pull/merge bị đụng độ code
$git pull
# CONFLICT! Git báo file nào bị đụng
⌘Mở file → tìm <<<<<<< ====== >>>>>>>
# Chọn giữ phần nào, xóa các dấu đánh dấu
$git add file-da-sua.ts
# Đánh dấu file đã giải quyết xong
$git commit
# Hoàn tất merge
$git merge --abort
# Hoặc: hủy merge, quay về trạng thái trước
Đưa dự án local lên GitHub lần đầu
$cd my-project && git init
# Khởi tạo Git trong thư mục dự án
$echo "node_modules/" > .gitignore
# Bỏ qua file không cần track
$git add . && git commit -m "init: khoi tao du an"
# Commit đầu tiên
>gh repo create --source=. --private --push
# Tạo repo trên GitHub + push luôn (1 lệnh)
⌘Hoặc: tạo repo trên web rồi git remote add origin <url>
# Cách thủ công nếu không dùng gh
Đề xuất

Để AI lo phần Git cho bạn

Ngại nhớ lệnh? Claude Code có thể commit, tạo branch, mở PR và giải quyết conflict giúp bạn — chỉ cần mô tả bằng tiếng Việt.

Claude Code Cheat Sheet → GitHub CLI Docs ↗