Bỏ qua tới nội dung chính
Portfolio
All topics

Git

Các lệnh Git thường dùng, từ cơ bản đến nâng caoEveryday Git commands, from the basics to the advanced

  • git config — đặt user.name

    Đặt tên tác giả toàn cục cho mọi commit.

    bash
    git config --global user.name "Ten"
  • git config — đặt user.email

    Đặt email tác giả toàn cục cho mọi commit.

    bash
    git config --global user.email "email@example.com"
  • git config — liệt kê

    Liệt kê toàn bộ cấu hình Git hiện có.

    bash
    git config --list
  • git init

    Khởi tạo repository Git mới trong thư mục hiện tại.

    bash
    git init
  • git init — đặt tên nhánh mặc định

    Khởi tạo repo với nhánh mặc định tên main.

    bash
    git init -b main
  • git clone

    Sao chép một repository từ remote về máy.

    bash
    git clone <repo-url>
  • git clone — nông (shallow)

    Clone chỉ lấy commit mới nhất, tải nhanh và nhẹ.

    bash
    git clone --depth 1 <repo-url>
  • git clone — một nhánh

    Clone thẳng một nhánh cụ thể.

    bash
    git clone -b <branch> <repo-url>
  • git clone — kèm submodule

    Clone repo kèm toàn bộ submodule.

    bash
    git clone --recurse-submodules <repo-url>
  • git status

    Xem trạng thái working tree: file đã/chưa stage, chưa track.

    bash
    git status
  • git status — gọn

    Hiển thị trạng thái dạng ngắn kèm thông tin nhánh.

    bash
    git status -sb
  • git add — một file

    Đưa một file vào staging area.

    bash
    git add <file>
  • git add — tất cả

    Stage toàn bộ thay đổi trong thư mục hiện tại.

    bash
    git add .
  • git add — chọn từng phần

    Chọn từng đoạn thay đổi (hunk) để stage.

    bash
    git add -p
  • git commit

    Ghi các thay đổi đã stage thành một commit.

    bash
    git commit -m "message"
  • git commit — stage + commit

    Tự stage các file đã track rồi commit trong một bước.

    bash
    git commit -am "message"
  • git commit --amend

    Sửa commit gần nhất (message hoặc thêm file đã stage). Không dùng cho commit đã push chung.

    bash
    git commit --amend
  • git commit --amend — giữ message

    Thêm thay đổi vào commit gần nhất mà giữ nguyên message.

    bash
    git commit --amend --no-edit
  • git diff

    So sánh working tree với staging (thay đổi chưa stage).

    bash
    git diff
  • git diff --staged

    Xem thay đổi đã stage so với commit gần nhất.

    bash
    git diff --staged
  • git diff — tóm tắt

    Tóm tắt số dòng thay đổi theo từng file.

    bash
    git diff --stat
  • git diff — giữa 2 nhánh/commit

    So sánh khác biệt giữa hai commit hoặc hai nhánh.

    bash
    git diff <a>..<b>
  • git log

    Xem lịch sử commit.

    bash
    git log
  • git log — đồ thị gọn

    Lịch sử một dòng mỗi commit, vẽ cây nhánh cho tất cả nhánh.

    bash
    git log --oneline --graph --all
  • git log — theo tác giả

    Lọc commit theo tác giả.

    bash
    git log --author="Ten"
  • git log — theo file

    Xem lịch sử commit ảnh hưởng tới một file.

    bash
    git log -- <file>
  • git show

    Xem chi tiết một commit kèm diff.

    bash
    git show <commit>
  • git show — file tại commit

    Xem nội dung một file tại thời điểm commit cụ thể.

    bash
    git show <commit>:<file>
  • git branch — liệt kê

    Liệt kê nhánh local và remote.

    bash
    git branch -a
  • git branch — tạo

    Tạo nhánh mới (không chuyển sang).

    bash
    git branch <ten-nhanh>
  • git branch — xoá

    Xoá nhánh đã merge (an toàn).

    bash
    git branch -d <ten-nhanh>
  • git branch — xoá ép

    Ép xoá nhánh dù chưa merge.

    bash
    git branch -D <ten-nhanh>
  • git branch — đổi tên

    Đổi tên một nhánh.

    bash
    git branch -m <ten-cu> <ten-moi>
  • git checkout — chuyển nhánh

    Chuyển sang nhánh khác (lệnh cũ, đa năng).

    bash
    git checkout <branch>
  • git checkout -b — tạo & chuyển

    Tạo nhánh mới rồi chuyển sang ngay.

    bash
    git checkout -b <ten-nhanh>
  • git checkout — khôi phục file

    Khôi phục file về trạng thái ở HEAD (bỏ thay đổi).

    bash
    git checkout -- <file>
  • git switch — chuyển nhánh

    Chuyển nhánh (lệnh mới, rõ nghĩa hơn checkout).

    bash
    git switch <branch>
  • git switch -c — tạo & chuyển

    Tạo nhánh mới rồi chuyển sang.

    bash
    git switch -c <ten-nhanh>
  • git switch — về nhánh trước

    Quay lại nhánh vừa rời khỏi.

    bash
    git switch -
  • git merge

    Gộp một nhánh vào nhánh hiện tại.

    bash
    git merge <branch>
  • git merge --no-ff

    Luôn tạo commit merge để giữ dấu vết nhánh.

    bash
    git merge --no-ff <branch>
  • git merge --squash

    Gộp thay đổi của nhánh thành một commit (chưa commit).

    bash
    git merge --squash <branch>
  • git merge --abort

    Huỷ quá trình merge khi đang conflict.

    bash
    git merge --abort
  • git remote — liệt kê

    Liệt kê các remote kèm URL.

    bash
    git remote -v
  • git remote add

    Thêm một remote mới tên origin.

    bash
    git remote add origin <repo-url>
  • git remote set-url

    Đổi URL của một remote.

    bash
    git remote set-url origin <repo-url>
  • git remote remove

    Xoá một remote.

    bash
    git remote remove <ten>
  • git fetch

    Tải commit/nhánh mới từ remote về, không merge.

    bash
    git fetch origin
  • git fetch --prune

    Fetch và xoá các nhánh remote đã bị xoá.

    bash
    git fetch -p
  • git fetch --all

    Fetch từ mọi remote.

    bash
    git fetch --all
  • git pull

    Fetch rồi merge từ remote vào nhánh hiện tại.

    bash
    git pull
  • git pull --rebase

    Fetch rồi rebase thay vì merge, giữ lịch sử thẳng.

    bash
    git pull --rebase
  • git pull --ff-only

    Chỉ cho phép fast-forward, tránh commit merge ngoài ý muốn.

    bash
    git pull --ff-only
  • git push

    Đẩy commit local lên remote.

    bash
    git push
  • git push -u — đặt upstream

    Đẩy và đặt upstream cho nhánh (lần sau chỉ cần git push).

    bash
    git push -u origin <branch>
  • git push --force-with-lease

    Ép push an toàn (không đè mất commit người khác vừa đẩy).

    bash
    git push --force-with-lease
  • git push --tags

    Đẩy toàn bộ tag lên remote.

    bash
    git push --tags
  • git push — xoá nhánh remote

    Xoá một nhánh trên remote.

    bash
    git push origin --delete <branch>
  • git restore — file

    Khôi phục file về trạng thái ở HEAD (bỏ thay đổi chưa stage).

    bash
    git restore <file>
  • git restore --staged — bỏ stage

    Bỏ file khỏi staging area, giữ nguyên thay đổi.

    bash
    git restore --staged <file>
  • git restore --source — từ commit

    Khôi phục file từ một commit cụ thể.

    bash
    git restore --source <commit> <file>
  • git reset --soft

    Lùi HEAD 1 commit, giữ nguyên index và working tree (commit lại được).

    bash
    git reset --soft HEAD~1
  • git reset (mixed)

    Lùi HEAD 1 commit, bỏ stage nhưng giữ thay đổi trên đĩa.

    bash
    git reset HEAD~1
  • git reset --hard

    Đưa nhánh về commit và XOÁ sạch thay đổi (nguy hiểm).

    bash
    git reset --hard <commit>
  • git reset — bỏ stage file

    Bỏ một file khỏi staging (giữ thay đổi).

    bash
    git reset <file>
  • git rm

    Xoá file khỏi working tree và staging.

    bash
    git rm <file>
  • git rm --cached

    Bỏ file khỏi Git nhưng vẫn giữ trên đĩa (vd lỡ commit .env).

    bash
    git rm --cached <file>
  • git mv

    Đổi tên hoặc di chuyển file, tự stage thay đổi.

    bash
    git mv <cu> <moi>
  • git tag — liệt kê

    Liệt kê các tag.

    bash
    git tag -l
  • git tag — có chú thích

    Tạo tag có chú thích (thường dùng đánh dấu phiên bản).

    bash
    git tag -a v1.0.0 -m "Release 1.0.0"
  • git tag — xoá

    Xoá một tag ở local.

    bash
    git tag -d <ten-tag>
  • git stash

    Cất tạm thay đổi chưa commit để làm việc khác.

    bash
    git stash push
  • git stash — kèm untracked + ghi chú

    Cất cả file chưa track kèm ghi chú.

    bash
    git stash push -u -m "wip: mo ta"
  • git stash list

    Liệt kê các stash đang có.

    bash
    git stash list
  • git stash pop

    Lấy lại stash mới nhất và xoá nó khỏi danh sách.

    bash
    git stash pop
  • git stash apply

    Lấy lại stash nhưng vẫn giữ nó trong danh sách.

    bash
    git stash apply
  • git stash drop

    Xoá một stash khỏi danh sách.

    bash
    git stash drop
  • git rebase

    Áp lại các commit của nhánh hiện tại lên đầu nhánh khác.

    bash
    git rebase <branch>
  • git rebase --onto

    Rebase một dải commit lên một base cụ thể.

    bash
    git rebase --onto <newbase> <upstream> <branch>
  • git rebase -i — tương tác

    Sửa/gộp (squash)/đổi thứ tự/bỏ commit qua editor.

    bash
    git rebase -i HEAD~3
  • git rebase --continue

    Tiếp tục rebase sau khi xử lý conflict.

    bash
    git rebase --continue
  • git rebase --abort

    Huỷ rebase, quay về trạng thái trước đó.

    bash
    git rebase --abort
  • git cherry-pick

    Áp một commit cụ thể từ nhánh khác vào nhánh hiện tại.

    bash
    git cherry-pick <commit>
  • git cherry-pick -n

    Áp commit nhưng chưa tạo commit (để chỉnh trước).

    bash
    git cherry-pick -n <commit>
  • git cherry-pick --continue

    Tiếp tục sau khi xử lý conflict.

    bash
    git cherry-pick --continue
  • git cherry-pick --abort

    Huỷ cherry-pick.

    bash
    git cherry-pick --abort
  • git revert

    Tạo commit đảo ngược một commit (an toàn cho nhánh đã push).

    bash
    git revert <commit>
  • git revert -n

    Đảo ngược commit nhưng chưa tạo commit.

    bash
    git revert -n <commit>
  • git reflog

    Xem lịch sử di chuyển HEAD — cứu commit tưởng đã mất.

    bash
    git reflog
  • git reset — theo reflog

    Đưa nhánh về một mốc trong reflog (khôi phục sau reset/rebase lỡ).

    bash
    git reset --hard HEAD@{2}
  • git worktree add

    Mở thêm một working tree cho một nhánh đã có.

    bash
    git worktree add <duong-dan> <branch>
  • git worktree add — nhánh mới

    Tạo worktree mới kèm tạo nhánh mới.

    bash
    git worktree add <duong-dan> -b <ten-nhanh>
  • git worktree list

    Liệt kê các worktree đang mở.

    bash
    git worktree list
  • git worktree remove

    Xoá một worktree đã tạo.

    bash
    git worktree remove <duong-dan>
  • git worktree prune

    Dọn các worktree đã bị xoá thủ công khỏi metadata.

    bash
    git worktree prune
  • git bisect start

    Bắt đầu tìm nhị phân commit gây lỗi.

    bash
    git bisect start
  • git bisect bad

    Đánh dấu commit hiện tại là bị lỗi.

    bash
    git bisect bad
  • git bisect good

    Đánh dấu một commit từng chạy tốt.

    bash
    git bisect good <commit>
  • git bisect reset

    Kết thúc bisect và quay về HEAD ban đầu.

    bash
    git bisect reset
  • git submodule add

    Thêm một repo khác làm submodule.

    bash
    git submodule add <url> <duong-dan>
  • git submodule update --init

    Khởi tạo và kéo toàn bộ submodule (kể cả lồng nhau).

    bash
    git submodule update --init --recursive
  • git submodule status

    Xem trạng thái các submodule.

    bash
    git submodule status
  • git blame

    Xem ai/commit nào sửa lần cuối từng dòng của file.

    bash
    git blame <file>
  • git blame — theo dòng

    Chỉ blame khoảng dòng 10-20.

    bash
    git blame -L 10,20 <file>
  • git clean — xem trước

    Dry-run: liệt kê file/thư mục chưa track sẽ bị xoá.

    bash
    git clean -nd
  • git clean — xoá

    Xoá file và thư mục chưa track (không hoàn tác được).

    bash
    git clean -fd
  • git describe

    Sinh tên version dễ đọc dựa trên tag gần nhất.

    bash
    git describe --tags --always --dirty
  • git sparse-checkout init

    Bật chế độ checkout một phần (cone mode).

    bash
    git sparse-checkout init --cone
  • git sparse-checkout set

    Chỉ checkout các thư mục chỉ định (repo/monorepo lớn).

    bash
    git sparse-checkout set <duong-dan>
  • git sparse-checkout disable

    Tắt sparse-checkout, quay lại checkout đầy đủ.

    bash
    git sparse-checkout disable
  • git archive

    Xuất nội dung một cây commit ra file nén (không kèm .git).

    bash
    git archive --format=tar.gz -o release.tar.gz HEAD
  • git shortlog

    Thống kê số commit theo tác giả (kèm email).

    bash
    git shortlog -sne
  • git am

    Áp patch dạng email (mbox), giữ tác giả/message, dùng 3-way khi cần.

    bash
    git am -3 <file.patch>
  • git am --abort

    Huỷ quá trình áp patch.

    bash
    git am --abort
  • git gc

    Dọn dẹp và tối ưu repo (gom object, nén).

    bash
    git gc
  • git gc --aggressive

    Nén kỹ hơn và xoá ngay object không còn tham chiếu.

    bash
    git gc --aggressive --prune=now