Git - Cheatsheet
Tổng hợp các lệnh Git thường được sử dụng.
🔖 Gợi ý từ Admin
📝 Tài liệu phỏng vấn kiến thức lập trình: Xem tại đây!!!
📌 Tìm hiểu về thuật toán: Xem tại đây!!!
📌 Roadmaps - Lộ trình trở thành một lập trình viên: Xem tại đây!!!
⚡️ Cheatsheet các ngôn ngữ lập trình: Xem tại đây!!!
⚡️ Handbook lập trình: Xem tại đây!!!
I. Tổng hợp Git Cheatsheet
1. Cơ bản
⚡️ Tạo 1 repository
$ git init [project name]
: Tạo một kho lưu trữ Git local mới. Lệnh này được sử dụng để khởi tạo một thư mục làm kho lưu trữ Git. Tùy chọn [project name]
là tên dự án bạn muốn gán cho kho lưu trữ, và nó là tùy chọn, có thể được bỏ qua. Ví dụ:
$ git init my_project
Khi lệnh này được thực hiện, một kho lưu trữ Git local mới sẽ được tạo ra trong thư mục "my_project".
$ git clone git_url
: Sao chép (clone) một kho lưu trữ từ một địa chỉ Git (URL) vào thư mục hiện tại. Địa chỉ Git (git_url
) là đường dẫn đến kho lưu trữ Git bạn muốn sao chép. Ví dụ:
$ git clone https://github.com/example/repo.git
Lệnh này tạo ra một bản sao của kho lưu trữ từ địa chỉ được chỉ định và đặt nó trong thư mục hiện tại.
$ git clone git_url my_directory
: Sao chép (clone) một kho lưu trữ từ một địa chỉ Git vào một thư mục cụ thể được chỉ định (my_directory
). Ví dụ:
$ git clone https://github.com/example/repo.git my_project
Lệnh này tạo ra một bản sao của kho lưu trữ từ địa chỉ được chỉ định và đặt nó trong thư mục "my_project".
⚡️ Làm việc với nhánh (Working with Branches)
$ git branch
: Liệt kê tất cả các nhánh local có sẵn trong kho lưu trữ. Các nhánh được liệt kê sẽ có dấu '*' ở trước nhánh hiện tại.
$ git branch
branchA
* branchB
main
Trong ví dụ này, nhánh hiện tại là branchB
.
$ git branch -av
: Liệt kê tất cả các nhánh cả local và remote, kèm theo thông tin về các commit của chúng.
$ git branch -av
branchA 0123456 [origin/branchA] Commit message
* branchB 789abc1 [origin/branchB] Another commit message
main def4567 [origin/main] Yet another commit message
$ git checkout my_branch
: Chuyển sang một nhánh khác (ở đây là my_branch
). Lệnh này cũng có tác dụng cập nhật thư mục làm việc để phản ánh trạng thái của nhánh mới.
$ git checkout my_branch
$ git checkout -b new_branch
: Tạo và chuyển sang một nhánh mới có tên new_branch
. Lệnh này tương đương với việc tạo một nhánh mới và sau đó chuyển sang nhánh đó.
$ git checkout -b new_branch
$ git branch -d my_branch
: Xóa một nhánh local đã hoàn thành công việc. Lệnh này sẽ thông báo lỗi nếu có các thay đổi chưa được merge vào nhánh khác.
$ git branch -d my_branch
$ git checkout branchB
và $ git merge branchA
: Ghép nhánh branchA
vào branchB
. Trước hết, bạn chuyển sang nhánh muốn ghép vào (branchB
), sau đó thực hiện lệnh git merge branchA
để ghép nhánh branchA
vào branchB
.
$ git checkout branchB
$ git tag my_tag
: Đặt một tag (nhãn) tại commit hiện tại với tên là my_tag
. Tag thường được sử dụng để đánh dấu các bản phát hành quan trọng hoặc các điểm cố định trong lịch sử commit.
$ git tag my_tag
⚡️ Thay đổi (Make a change)
# Lệnh này hiển thị trạng thái của tất cả các tệp trong thư mục làm việc.
$ git status
# Thêm (stage) một tệp cụ thể vào danh sách chuẩn bị cho commit.
$ git add [file]
# Thêm (stage) tất cả các tệp đã được thay đổi trong thư mục làm việc vào danh sách chuẩn bị cho commit.
$ git add .
# Commit tất cả các tệp đã được staged với một thông điệp commit.
$ git commit -m "commit message"
# Hủy bỏ các thay đổi trong tệp làm việc chưa được staged.
$ git restore [file]
# Hủy bỏ việc stage (unstage) một tệp đã được thêm vào danh sách chuẩn bị cho commit.
$ git restore --staged [file]
# Hủy bỏ việc stage (unstage) một tệp và giữ lại các thay đổi trong tệp.
$ git reset [file]
# Quay trở lại trạng thái của commit cuối cùng, hủy bỏ tất cả các thay đổi chưa được commit.
$ git reset --hard
# Hiển thị sự khác biệt giữa các thay đổi chưa được staged và trạng thái của commit cuối cùng.
$ git diff
# Hiển thị sự khác biệt giữa các thay đổi đã được staged và trạng thái của commit cuối cùng.
$ git diff --staged
# Áp dụng các commit từ nhánh hiện tại lên trên nhánh được chỉ định.
$ git rebase [branch]
⚡️ Cấu hình (Configuration)
# Đặt tên người dùng mà bạn muốn gắn kết với các commit và tags. Thông tin này sẽ xuất hiện trong lịch sử commit của kho lưu trữ Git.
$ git config --global user.name "name"
# Đặt địa chỉ email mà bạn muốn gắn kết với các commit và tags. Điều này giúp xác định người tạo commit.
$ git config --global user.email "email"
# Bật hiển thị màu sắc trong đầu ra của Git, làm cho các lệnh và kết quả trở nên dễ đọc hơn.
$ git config --global color.ui auto
# Mở tệp cấu hình toàn cục của Git trong một trình soạn thảo văn bản để bạn có thể chỉnh sửa trực tiếp.
$ git config --global --edit
⚡️ Theo dõi Repository (Observe your Repository)
# Hiển thị lịch sử commit của nhánh hiện tại. Các commit được liệt kê theo thứ tự mới nhất ở đầu.
$ git log
# Hiển thị các commit trên branchA mà không có trên branchB.
$ git log branchB..branchA
# Hiển thị lịch sử commit của một tệp cụ thể, theo dõi tệp ngay cả khi nó đã được đổi tên.
$ git log --follow [file]
# Hiển thị sự khác biệt giữa các commit trên branchA và branchB.
$ git diff branchB...branchA
# Hiển thị thông tin chi tiết về một commit hoặc đối tượng Git cụ thể dựa trên mã hash (SHA).
$ git show [SHA]
⚡️ Đồng bộ (Synchronize)
# Lấy tất cả các nhánh từ kho lưu trữ Git remote được đặt tên là [alias] mà không thực hiện bất kỳ sự kết hợp nào.
$ git fetch [alias]
# Gộp một nhánh từ kho lưu trữ Git remote vào nhánh hiện tại của bạn để đồng bộ với phiên bản từ kho lưu trữ đó.
$ git merge [alias]/[branch]
# Tạo một commit merge mới, ngay cả khi có thể thực hiện fast-forward. Điều này giữ cho lịch sử commit trở nên rõ ràng hơn.
$ git merge --no-ff [alias]/[branch]
# Chỉ thực hiện fast-forward khi merge. Nếu không thể fast-forward, lệnh sẽ báo lỗi.
$ git merge --ff-only [alias]/[branch]
# Gửi các commit từ nhánh hiện tại của bạn lên kho lưu trữ Git remote được đặt tên là [alias] và làm cho nhánh được đặt tên là [branch] ở đó giống với nhánh hiện tại của bạn.
$ git push [alias] [branch]
# Kết hợp tất cả các commit từ nhánh được theo dõi của bạn trên kho lưu trữ Git remote và thực hiện một merge vào nhánh hiện tại của bạn.
$ git pull
# Chọn một commit cụ thể từ một nhánh khác và áp dụng nó vào nhánh hiện tại của bạn.
$ git cherry-pick [commit_id]
⚡️ Remote
# Thêm một địa chỉ Git URL làm alias với tên [alias] để bạn có thể tham chiếu nó dễ dàng hơn.
$ git remote add [alias] [url]
# Hiển thị tên của tất cả các kho lưu trữ Git remote bạn đã thiết lập.
$ git remote
# Hiển thị tên và địa chỉ URL của tất cả các kho lưu trữ Git remote bạn đã thiết lập.
$ git remote -v
# Xóa một kho lưu trữ Git remote khỏi danh sách của bạn.
$ git remote rm [remote repo name]
# Thay đổi địa chỉ URL của một kho lưu trữ remote đã được đặt tên là origin.
$ git remote set-url origin [git_url]
⚡️ Commit tạm thời (Temporary Commits)
# Lưu trữ các thay đổi đã được chỉnh sửa và staged mà không commit chúng. Điều này giúp bạn tạm thời lưu trữ các thay đổi để bạn có thể chuyển đến một trạng thái sạch sẽ để thực hiện các thao tác khác.
$ git stash
# Liệt kê danh sách các stash đã được tạo, hiển thị theo thứ tự stack.
$ git stash list
# Khôi phục thay đổi từ stash stack và loại bỏ stash từ đỉnh của stack. Điều này giống như git stash apply nhưng cũng xóa stash đã áp dụng.
$ git stash pop
# Loại bỏ stash từ đỉnh của stash stack mà không khôi phục thay đổi. Sử dụng khi bạn muốn xóa stash mà không muốn áp dụng lại thay đổi.
$ git stash drop
⚡️ Theo dõi thay đổi đường dẫn (Tracking path Changes)
# Xóa một tệp từ dự án và đưa thay đổi vào danh sách chuẩn bị cho commit. Điều này cũng có nghĩa là tệp sẽ bị xóa khỏi thư mục làm việc của bạn.
$ git rm [file]
# Di chuyển hoặc đổi tên một tệp hoặc thư mục, và đưa thay đổi vào danh sách chuẩn bị cho commit. Điều này làm cho Git theo dõi sự di chuyển của tệp.
$ git mv [existing-path] [new-path]
# Hiển thị tất cả các commit trong lịch sử, bao gồm thông tin về các thay đổi trong các tệp và thư mục. Thêm -M để theo dõi sự di chuyển của các tệp.
$ git log --stat -M
⚡️ Bỏ qua file: file .gitignore
chỉ định các tệp tin có chủ ý không được theo dõi mà Git nên bỏ qua
/logs/*
# "!" có nghĩa là không bỏ qua
!logs/.gitkeep
/# Bỏ qua tệp tin hệ thống của Mac
.DS_store
# Bỏ qua thư mục node_modules
node_modules
# Bỏ qua tệp tin cấu hình SASS
.sass-cache
2. Git Tricks
⚡️ Đổi tên nhánh (Rename branch)
# Đổi tên nhánh thành new_name
$ git branch -m <new_name>
# Đẩy và đặt lại (reset)
$ git push origin -u <new_name>
# Xóa nhánh từ xa
$ git push origin --delete <old>
$ git branch -m <new_name>
: Sử dụng để đổi tên nhánh hiện tại thành <new_name>
.
$ git branch -m feature-branch
$ git push origin -u <new_name>
: Đẩy nhánh đã được đổi tên lên kho lưu trữ từ xa (remote repository) và thiết lập nhánh đã đổi tên làm nhánh theo dõi (upstream branch).
$ git push origin -u feature-branch
$ git push origin --delete <old>
: Xóa nhánh cũ (<old>
) từ kho lưu trữ từ xa.
$ git push origin --delete old-feature-branch
Lưu ý: Khi đổi tên nhánh và đẩy nhánh mới lên kho lưu trữ từ xa, có thể cần cập nhật các liên kết nhánh (branch references) trong các máy làm việc khác nhau bằng cách thực hiện git pull
và git fetch
.
⚡️ Lịch sử commit (Log)
# Tìm kiếm các thay đổi trong lịch sử commit sử dụng một từ khoá cụ thể trong mã nguồn.
$ git log -S'<a term in the source>'
# Hiển thị thay đổi của một tệp cụ thể qua các commit.
$ git log -p <file_name>
# In ra một biểu đồ đẹp mắt của lịch sử commit với các thông tin như hash, nhánh, và thay đổi qua thời gian.
$ git log --pretty=oneline --graph --decorate --all
⚡️ Nhánh (Branch)
# Liệt kê tất cả các nhánh cùng với thông tin về nhánh theo dõi của chúng (upstream branches).
$ git branch -vv
# Chuyển đổi nhanh chóng sang nhánh trước đó mà bạn đã làm việc.
$ git checkout -
# Chỉ liệt kê các nhánh từ xa (remote branches).
$ git branch -r
# Chuyển sang chỉ một tệp từ một nhánh khác mà không chuyển đổi toàn bộ thư mục làm việc.
$ git checkout <branch> -- <file>
⚡️ Sửa lại lịch sử commit (Rewriting history)
# Sửa lại thông điệp của commit cuối cùng với một thông điệp mới. Lệnh này cũng cho phép bạn chỉnh sửa nội dung của commit cuối cùng trước khi thực hiện commit lại.
$ git commit --amend -m "new message"
👉 Xem thêm tại: Rewriting history
⚡️ Git Aliases
$ git config --global alias.co checkout
: Tạo một alias (bí danh) cho lệnh git checkout
và đặt tên là co
. Bây giờ, bạn có thể sử dụng git co
thay vì git checkout
.
$ git co feature-branch
$ git config --global alias.br branch
: Tạo một alias cho lệnh git branch
và đặt tên là br
. Bây giờ, bạn có thể sử dụng git br
thay vì git branch
.
$ git br -a
$ git config --global alias.ci commit
: Tạo một alias cho lệnh git commit
và đặt tên là ci
. Bây giờ, bạn có thể sử dụng git ci
thay vì git commit
.
$ git ci -m "Commit message"
$ git config --global alias.st status
: Tạo một alias cho lệnh git status
và đặt tên là st
. Bây giờ, bạn có thể sử dụng git st
thay vì git status
.
$ git st
Các alias giúp rút ngắn và tùy chỉnh các lệnh Git mà bạn sử dụng thường xuyên. Bạn có thể tạo thêm alias theo cách tương tự cho các lệnh khác theo nhu cầu của mình.
👉 Xem thêm tại: More Aliases