Git Command
Note về cách dùng git command
Cấu hình
Cấu hình các thông tin khi cài git lần đầu.
git config --global user.name "username"
git config --global user.email "email"
git config --global init.defaultBranch main💡Cấu hình editor cho commit, rebase, git sẽ mở editor này options: "code --wait, vim, nano"
git config --global core.editor "vim"
Xem lại danh sách Config
git config --list --globalKhởi tạo local repo
Lệnh này tạo thư mục .git bên trong thư mục hiện tại. Thư mục hiện thành một kho lưu trữ Git
git initKết nối với kho lưu trữ từ xa (remote)
URL có thể là đường dẫn một thư mục Git
git clone <URL_của_kho_lưu_trữ>Ví dụ clone 1 repo từ GitHub
git clone https://github.com/nguyenvana/my-awesome-project.gitĐổi tên branch local (master sang main)
git branch -m master main0) Khởi tạo & Remote
# Tạo repo mới (chọn tên nhánh cho thống nhất: main hoặc master)
git init -b main
# Thêm remote
git remote add origin <REMOTE_URL>
# Push lần đầu, đặt upstream
git push -u origin main1) Staging & Commit
# Thêm tất cả file mới/sửa vào staging
git add .
# Thêm file cụ thể
git add path/to/file.ext
# Commit
git commit -m "message"
# Shorthand cập nhật *chỉ file đã được track*
git commit -a -m "message" # Không thêm file mới!2) Sửa commit cuối (amend)
git add file2.txt
git commit --amend --no-edit # giữ nguyên message
git commit --amend -m "new message"Chỉ dùng khi commit đó chưa push. Nếu đã push → cân nhắc
--force-with-lease.
3) Xem lịch sử & khác biệt
git log --oneline # gọn 1 dòng/commit
git log -n 5 # 5 commit gần nhất
git log --graph --oneline --decorate --all # sơ đồ nhánh
git diff # khác biệt chưa staged
git diff --staged # khác biệt đã staged
git diff <A>...<B> # khác biệt của B so với merge-base(A,B)
git diff --name-status <A>...<B> # chỉ danh sách file4) Branch căn bản
# Tạo nhánh & chuyển sang
git checkout -b feature-xyz
# (Git mới) git switch -c feature-xyz
# Làm việc → add/commit
git add .
git commit -m "feat: ..."
# Push nhánh mới
git push -u origin feature-xyz5) Merge (kết nhánh)
# Về main và cập nhật
git checkout main
git pull origin main
# Merge feature vào main
git merge feature-xyz # nếu conflict → sửa file, rồi:
git add .
git commit -m "resolve conflicts"
git push origin main6) Rebase (làm thẳng lịch sử)
Mục tiêu: “phát lại” commit của nhánh đang làm trên đỉnh main.
git checkout feature-xyz
git fetch origin
git rebase origin/main
# Nếu conflict:
# 1) sửa file
git add .
git rebase --continue
# 2) nếu muốn bỏ rebase:
git rebase --abortPhản biện: Đang rebase không dùng
git pull. Kết thúc sạch rồi mớigit push. Nếu nhánh đã push trước đó, sau rebase có thể cần:
git push --force-with-leaseDùng rebase trên nhánh cá nhân. Nhánh shared thì ưu tiên merge.
7) Khôi phục & quay lui
7.1) Khôi phục file lỡ xóa/chỉnh (chưa commit)
# Cách mới (khuyến nghị, Git ≥2.23)
git restore path/to/a.txt # về lại từ HEAD
git restore --staged path/to/a.txt # bỏ staging
# Cách cũ
git checkout -- path/to/a.txt7.2) Reset (di chuyển HEAD về commit trước)
# Quay về commit trước, giữ thay đổi ở working dir (default: --mixed)
git reset HEAD~1
# Giữ cả staging (để commit lại ngay)
git reset --soft HEAD~1
# XÓA sạch thay đổi ở working + staging (nguy hiểm)
git reset --hard HEAD~1Dùng
--hardmất dữ liệu chưa commit. Nếu đã push, dùnggit revertan toàn hơn:
git revert <commit_sha>8) Đồng bộ remote
git fetch origin # chỉ tải ref/obj, không merge
git pull origin main # fetch + merge
git pull --rebase # fetch + rebase (lịch sử thẳng)
git push origin <branch>9) Xử lý conflict: Merge vs Rebase
Trong merge:
git merge <branch>sửa conflict →
git add .git commit(hoặcgit merge --continuetrên Git mới)
Trong rebase:
git rebase <base>sửa conflict →
git add .git rebase --continuehủy rebase:
git rebase --abort
Đừng chạy git pull rồi lại git rebase --continue. Hai quy trình khác nhau.
10) Cherry-pick & Stash
# Lấy 1 commit cụ thể đưa sang nhánh hiện tại
git cherry-pick <commit_sha>
# Lưu thay đổi tạm thời
git stash
git stash list
git stash pop # lấy ra và xóa entry
git stash apply # lấy ra nhưng giữ entryCherry-pick commit chưa ổn định có thể gây xung đột dây chuyền. Stash nhiều lớp dễ rối — đặt message:
git stash push -m "desc".
11) Các lệnh “tà đạo” (cân nhắc kỹ)
git push --force: ghi đè remote. Thay bằng--force-with-leaseđể không đè mất việc của người khác.git rebase -itrên nhánh đã share: chỉ làm khi mọi người đồng thuận.git reset --hard: tránh dùng trên nhánh share; local thì luôn chắc chắn đã backup.git reflog delete,git gc: có thể làm khó việc cứu commit. Trước khi “dọn rác”, hãy chắc chắn team không cần các ref cũ.
12) Mẫu quy trình “sạch” khi làm feature
# Tạo nhánh từ main mới nhất
git checkout main
git pull --ff-only
git switch -c feat/x
# Làm việc → commit nhỏ, rõ
git add -p
git commit -m "feat(x): ..."
# Thường xuyên đồng bộ base
git fetch origin
git rebase origin/main # hoặc merge nếu team policy
# Push và mở PR
git push -u origin feat/xLast updated