1. Cấu hình Git lần đầu chạy
git config --list --show-origin
git config --global user.name ten_nguoi_dung
git config --global user.email dia_chi_email
2. Trợ giúp các lệnh Git
git help lenh
git lenh --help
man git lenh
# danh sách đơn giản
git lenh -h
3. Lấy kho lưu trữ Git
# 1. Khởi tạo trong thư mục hiện có
git init
# 2. Sao chép kho lưu trữ
git clone duong_dan ten_thu_muc
4. Ghi nhận các cập nhật vào kho mới
Kiểm tra trạng thái tập tin
git status
# xuất kết quả ngắn gọn
git status -s
Theo dõi tập tin mới
git add ten_tap_tin
Lệnh này có thể bắt đầu theo dõi tập tin mới, hoặc đưa tập tin đã theo dõi vào vùng dàn xếp, cũng như đánh dấu tập tin có xung đột là đã giải quyết khi hợp nhất. Hiểu đơn giản là "thêm chính xác nội dung vào lần commit tiếp theo" thay vì "thêm tập tin vào dự án".
Bỏ qua tập tin
Tập tin .gitignore có quy định về định dạng như sau:
- Tất cả các dòng trống hoặc bắt đầu bằng # đều được Git bỏ qua.
- Có thể sử dụng glob pattern chuẩn, áp dụng đệ quy trong toàn bộ workspace.
- Mẫu so khớp có thể bắt đầu bằng (/) để ngăn chặn đệ quy.
- Mẫu so khớp có thể kết thúc bằng (/) để chỉ định thư mục.
Glob pattern là biểu thức chính quy đơn giản mà shell sử dụng. Dấu sao (*) khớp với không hoặc nhiều ký tự bất kỳ; [abc] khớp với bất kỳ ký tự nào trong ngoặc vuông (ví dụ khớp a, b hoặc c); dấu chấm hỏi (?) chỉ khớp với một ký tự bất kỳ; nếu dùng gạch ngang trong ngoặc vuông để phân cách hai ký tự, tất cả các ký tự trong phạm vi đó đều khớp (ví dụ [0-9] khớp các số từ 0 đến 9). Dùng hai dấu sao (**) để khớp với bất kỳ thư mục trung gian nào, ví dụ a/**/z khớp với a/z, a/b/z hoặc a/b/c/z.
Để bỏ qua các tập tin hoặc thư mục ngoài mẫu chỉ định, thêm dấu chấm than (!) vào trước mẫu để phủ định.
# Bỏ qua tất cả tập tin .a
*.a
# Nhưng theo dõi tất cả lib.a, mặc dù đã bỏ qua .a ở trên
!lib.a
# Chỉ bỏ qua tập TODO trong thư mục hiện tại, không bỏ qua subdir/TODO
/TODO
# Bỏ qua mọi thư mục có tên build trong bất kỳ thư mục nào
build/
# Bỏ qua doc/notes.txt, nhưng không bỏ qua doc/server/arch.txt
doc/*.txt
# Bỏ qua tất cả tập tin .pdf trong doc/ và các thư mục con
doc/**/*.pdf
Xem các thay đổi đã dàn xếp hoặc chưa dàn xếp
# 1. Xem thay đổi chưa dàn xếp
git diff
# 2. Xem thay đổi đã dàn xếp
git diff --staged
Commit các cập nhật
git commit -m noi_dung
# Bỏ qua bước sử dụng vùng dàn xếp
git commit -a -m noi_dung
Khi thêm tùy chọn -a vào git commit, Git sẽ tự động dàn xếp tất cả các tập tin đã theo dõi trước đó và commit cùng lúc, do đó bỏ qua bước git add.
Xóa tập tin
# 1. Xóa khỏi quản lý phiên bản
git rm ten_tap_tin
# 2. Giữ tập tin trên đĩa, Git không theo dõi nữa
git rm --cached ten_tap_tin
Di chuyển tập tin
git mv tap_tin_nguon tap_tin_dich
5. Nhật ký Git
# Hiển thị sự khác biệt của mỗi commit, tùy chọn -2 chỉ hiển thị 2 commit gần nhất
git log -p -2
| Tùy chọn | Mô tả |
|---|---|
| -p | Hiển thị sự khác biệt theo định dạng patch cho mỗi commit |
| --stat | Hiển thị thống kê các tập tin đã sửa đổi cho mỗi commit |
| --shortstat | Chỉ hiển thị dòng thay đổi/thêm/xóa từ --stat |
| --name-only | Chỉ hiển thị danh sách tập tin đã sửa đổi sau thông tin commit |
| --name-status | Hiển thị danh sách tập tin mới, sửa đổi, xóa |
| --abbrev-commit | Chỉ hiển thị vài ký tự đầu của SHA-1 thay vì 40 ký tự đầy đủ |
| --relative-date | Sử dụng thời gian tương đối ngắn |
| --graph | Hiển thị đồ thị ASCII về lịch sử nhánh và hợp nhất bên cạnh log |
| --pretty | Sử dụng định dạng khác cho thông tin commit lịch sử |
| --oneline | Viết tắt của --pretty=oneline --abbrev-commit |
Giới hạn độ dài kết quả
| Tùy chọn | Mô tả |
|---|---|
| -<n> | Chỉ hiển thị n commit gần nhất |
| --since,--after | Chỉ hiển thị các commit sau thời gian chỉ định |
| --until,--before | Chỉ hiển thị các commit trước thời gian chỉ định |
| --author | Chỉ hiển thị các commit của tác giả khớp với chuỗi cho trước |
| --committer | Chỉ hiển thị các commit của người commit khớp với chuỗi cho trước |
| --grep | Chỉ hiển thị các commit có mô tả chứa chuỗi cho trước |
| -S | Chỉ hiển thị các commit thêm hoặc xóa nội dung khớp với chuỗi cho trước |
6. Thao tác hoàn tác
Hoàn tác commit
Tình huống: Sau khi commit mới phát hiện thiếu vài tập tin hoặc viết sai thông điệp commit
git commit --amend
Lệnh này sẽ commit các tập tin trong vùng dàn xếp. Nếu chưa có thay đổi nào kể từ lần commit trước (ví dụ chạy ngay sau khi commit), thì snapshot sẽ giữ nguyên, chỉ thay đổi thông điệp commit.
Trình soạn thảo văn bản khởi động, có thể thấy thông điệp commit trước đó. Sau khi chỉnh sửa và lưu, thông điệp mới sẽ thay thế thông điệp cũ.
Ví dụ, sau khi commit phát hiện quên dàn xếp một số thay đổi cần thiết, có thể làm như sau:
git commit -m 'commit ban dau'
git add tap_tin_quen
git commit --amend
Kết quả cuối cùng chỉ có một commit - lần commit thứ hai sẽ thay thế kết quả của lần commit đầu tiên.
Hủy dàn xếp tập tin
git reset HEAD ten_tap_tin
Hoàn tác thay đổi đối với tập tin
Thuận tiện để hoàn tác thay đổi - khôi phục về trạng thái lần commit trước (hoặc trạng thái ngay sau khi clone, hoặc trạng thái khi vừa đưa vào thư mục làm việc)
git checkout -- ten_tap_tin