Hiểu Về Git Cơ Bản Và Các Lệnh Thường Dùng
Git là một hệ thống quản lý phiên bản phân tán (Distributed Version Control System - DVCS) được sử dụng rộng rãi trong phát triển phần mềm. Git cho phép nhiều người cùng làm việc trên một dự án, theo dõi thay đổi của mã nguồn theo thời gian, và dễ dàng khôi phục lại các phiên bản cũ nếu cần.
Các Khái Niệm Cơ Bản
- Repository: Nơi lưu trữ toàn bộ mã nguồn, lịch sử thay đổi và thông tin của dự án. Có 2 loại:
- Local Repository: Nằm trên máy tính của mỗi lập trình viên.
- Remote Repository: Nằm trên máy chủ, thường được lưu trữ trên các dịch vụ như Github, Gitlab, Bitbucket.
- Branch: Là nhánh con của dự án, cho phép phát triển tính năng mới hoặc sửa lỗi độc lập mà không ảnh hưởng đến nhánh chính (thường là
main
hoặcmaster
). - Working Directory: Là thư mục bạn đang làm việc trực tiếp với mã nguồn trên máy tính.
- Staging Area: Là khu vực trung gian, nơi bạn "chuẩn bị" các thay đổi trước khi đưa vào repository.
Các Lệnh Git Cơ Bản
1. Git Init
Lệnh git init
dùng để khởi tạo một repository Git mới trong thư mục hiện tại. Khi bạn chạy lệnh này, Git sẽ tạo một thư mục con ẩn .git
chứa toàn bộ thông tin cần thiết để Git theo dõi thay đổi của dự án.
git init
Ví dụ:
$ git init
Initialized empty Git repository in /Users/username/my-project/.git/
Lưu ý: Lệnh git init
chỉ cần chạy một lần duy nhất cho mỗi dự án.
2. Git Clone
Lệnh git clone
dùng để tạo một bản sao (clone) của một repository Git từ xa (remote) về máy tính của bạn.
git clone <URL>
Trong đó <URL>
là địa chỉ của remote repository, có thể là SSH hoặc HTTPS.
Ví dụ:
git clone git@github.com:username/my-project.git
Xem thêm: Kết nối với Github bằng SSH
3. Git Status
Lệnh git status
dùng để kiểm tra trạng thái hiện tại của repository. Lệnh này cho biết:
- Những thay đổi đã được staging (sẵn sàng để commit).
- Những thay đổi chưa được staging.
- Những file chưa được Git theo dõi.
git status
Ví dụ:
$ git status
On branch main
Your branch is up to date with 'origin/main'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: README.md no changes added to commit (use "git add" and/or "git commit -a")
Hiển thị ngắn gọn:
git status -s
Ý nghĩa các ký tự:
: Unmodified (không thay đổi)
M
: Modified (có sửa đổi)A
: Added (file mới thêm)D
: Deleted (file bị xóa)R
: Renamed (đổi tên file)C
: Copied (file copy từ file khác)U
: Updated but unmerged (đã cập nhật, nhưng chưa merge)
4. Git Add
Lệnh git add
dùng để thêm thay đổi từ working directory vào staging area.
git add <tên file>
Hoặc thêm tất cả thay đổi:
git add .
5. Git Commit
Lệnh git commit
dùng để "ghi" (commit) các thay đổi từ staging area vào repository.
git commit -m "Mô tả ngắn gọn về thay đổi"
Ví dụ:
git commit -m "Cập nhật README.md"
6. Git Remote
Lệnh git remote
dùng để quản lý kết nối giữa local repository và remote repository.
-
Liệt kê remote repository:
git remote
-
Thêm remote repository:
git remote add <tên> <URL>
-
Đổi tên remote repository:
git remote rename <tên cũ> <tên mới>
-
Xóa remote repository:
git remote remove <tên>
-
Cập nhật URL của remote repository:
git remote set-url <tên> <URL mới>
7. Git Push
Lệnh git push
dùng để đẩy (push) các commit từ local repository lên remote repository.
-
Đẩy commit lên nhánh mặc định (thường là
main
hoặcmaster
):git push <tên remote> <nhánh local>
Ví dụ:
git push origin main
-
Đẩy commit lên nhánh cụ thể:
git push <tên remote> <nhánh local>:<nhánh remote>
-
Tạo nhánh mới trên remote repository:
git push <tên remote> <nhánh local>
-
Xóa nhánh trên remote repository:
git push <tên remote> :<nhánh cần xóa>
8. Git Log
Lệnh git log
dùng để xem lịch sữ các commit trước đó trong local và cả remote
- Lọc xem tất cả lịch sữ commit trước đó
git log
- Lọc xem lịch sữ commit một cách tóm gọn lại
git log --oneline
- Lọc xem hết toàn bộ code thây đổi trong lịch sữ theo commit
git log -p
- Lọc commit theo từ
git log --oneline --grep="keyword ..."
- Lọc commit theo tác giả
git log --oneline --author="tác giả"`
9. Git Pull
Lệnh git pull
trong Git được sử dụng để cập nhật local repository của bạn với những thay đổi mới nhất từ remote repository.
- Pull code về local
git pull
git pull
thực chất là sự kết hợp của hai lệnh Git khác:
git fetch
: Lệnh này tải về tất cả những thay đổi (commits, branches, tags) từ remote repository về local repository của bạn. Tuy nhiên,git fetch
không tự động merge những thay đổi này vào nhánh hiện tại của bạn.git merge
: Sau khi đãfetch
những thay đổi mới,git merge
sẽ tiến hành hợp nhất (merge) những thay đổi đó vào nhánh hiện tại của bạn.
10. Git Fetch
Lệnh git fetch được sử dụng để tải về tất cả những thay đổi (commits, branches, tags) từ remote repository về local repository của bạn.
Điểm quan trọng: git fetch không tự động merge những thay đổi này vào nhánh hiện tại của bạn. Thay vào đó, nó chỉ tải về và lưu trữ những thay đổi đó trong local repository của bạn.
git fetch <remote> <branch>
Ví dụ:
git fetch origin main
10. Git Merge
Lệnh git merge được sử dụng để hợp nhất (merge) những thay đổi từ một nhánh khác (thường là nhánh bạn vừa fetch từ remote repository) vào nhánh hiện tại của bạn.
git merge <tên nhánh>
11. Git Checkout
Là một lệnh truyền thống được sữ dụng nhiều
- Chuyển đổi các nhánh
git checkout <tên nhánh>
- Tạo nhánh mới và chuyển sang nhánh đó
git checkout -b <tên nhánh mới>
- Khôi phục toàn bộ working directory về trạng thái từ commit trước đó (có thể gây mất dữ liệu, nên cẩn thận)
git checkout <commit>
Ưu điểm:
-
Linh hoạt, cung cấp nhiều chức năng trong một lệnh. Nhược điểm:
-
Dễ gây nhầm lẫn do có nhiều chức năng.
-
Có thể gây mất dữ liệu nếu sử dụng sai cách.
12. Git Switch
git switch
là lệnh mới được giới thiệu trong Git phiên bản 2.23, tập trung vào chức năng chuyển đổi giữa các branch một cách rõ ràng và an toàn hơn.
- Chuyển đổi các nhánh
git switch <tên nhánh>
- Tạo nhánh mới và chuyển sang nhánh đó
git switch -b <tên nhánh mới>
Ưu điểm:
- Dễ hiểu và sử dụng hơn
git checkout
khi chuyển đổi branch. - An toàn hơn, hạn chế rủi ro mất dữ liệu.
Nhược điểm:
- Ít chức năng hơn
git checkout
.
BẢNG SO SÁNH NHỎ GIỮA GITCHECKOUT và GITSWITCH
Tính năng | git checkout | git switch |
Chuyển đổi nhánh | Có | Có |
Tạo nhánh mới | Có (git checkout -b <nhánh>) | Có (git switch -c <nhánh>) |
Khôi phục file từ staging area | Có (git checkout -- <tệp>) | Không |
Khôi phục file từ commit | Có (git checkout <commit> -- <tệp>) | Không |
Khôi phục thay đổi từ stash | Có (git checkout -p <stash>) | Không |
Rõ ràng về mục đích | Thấp (nhiều chức năng) | Cao (chỉ tập trung vào chuyển đổi nhánh) |
Độ an toàn | Thấp (có thể gây mất dữ liệu nếu dùng sai) | Cao (ít rủi ro hơn) |