VieTopik
Tiếng HànTiếng AnhIT
  • Góc học tập
Tải app
  • Thư viện
  • Luyện thi
  • Cẩm nang
  • Góc học tập
Kiến trúc và chất lượng codeGit
Bài 1/17
6 phút

Commit và lịch sử

Nội dung bài · 5 mục
  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt

Sửa code xong, chạy thấy hỏng, mà không nhớ đã đổi những gì. Hoặc muốn quay lại bản chạy được hôm qua nhưng đã lưu đè mất. Git lưu lại từng mốc thay đổi của project để bạn xem lại hay quay về lúc nào cũng được.

Khái niệm

📸 Commit: một mốc lưu lại nội dung các file của project tại một thời điểm, kèm lời mô tả và tên người tạo.

🛒 Staging area: nơi gom những thay đổi sẽ đi vào commit tiếp theo, thêm vào bằng git add.

🙈 .gitignore: file liệt kê những file, thư mục Git bỏ qua, không bao giờ đưa vào commit.

Một thay đổi đi qua ba chỗ: sửa trong thư mục làm việc, git add vào staging area, rồi git commit để thành một mốc trong lịch sử.

Ví dụ

Cài Git xong, khai báo tên và email một lần. Git gắn chúng vào mỗi commit:

git config --global user.name "An"
git config --global user.email "an@shop.vn"

Mở terminal ở thư mục chứa shop-api, rồi đưa project vào một kho Git:

git init -b main
# mở shop-api/.gitignore, thêm dòng application-dev.properties
git add .
git commit -m "Commit đầu tiên"
git log --oneline
  • git init -b main tạo kho Git (repository) trong thư mục hiện tại, nhánh chính tên main.
  • Project tạo từ start.spring.io đã có sẵn shop-api/.gitignore, bỏ qua thư mục target/ do Maven sinh ra khi build.
  • application.properties đang chứa mật khẩu Oracle và jwt.key. Mật khẩu không được commit: chuyển hai dòng này sang application-dev.properties như bài Cấu hình với application.properties, rồi thêm file đó vào .gitignore trước khi git add.
  • git add . đưa mọi file vào staging area, git commit -m tạo commit kèm lời mô tả.
  • git log --oneline in mỗi commit một dòng: mã commit và lời mô tả.

Thử ngay

Thêm một dòng comment vào cuối PriceCalculator.java, tạo file mới Notes.txt ở thư mục gốc, rồi chạy:

git status

Đoán trước khi chạy: Git nói gì về hai file này?

Xem kết quả
On branch 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:   shop-api/src/main/java/com/shop/api/PriceCalculator.java

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	Notes.txt

no changes added to commit (use "git add" and/or "git commit -a")

PriceCalculator.java đã có trong commit trước nên là "modified", đã sửa nhưng chưa git add. Git ghi đường dẫn tính từ thư mục gốc của kho.

Notes.txt là file mới, Git chưa theo dõi nên là "untracked". Muốn đưa cả hai vào commit tiếp theo thì git add chúng.

Lỗi hay gặp

Commit khi chưa có .gitignore. Project không tạo từ start.spring.io, hoặc lỡ mất file .gitignore khi chép thư mục. target/ nặng và đổi sau mỗi lần build, làm lịch sử rối.

# SAI — add hết khi chưa có .gitignore
git init -b main
git add .
# ĐÚNG — tạo .gitignore trước khi add
git init -b main
# tạo file .gitignore có dòng target/
git add .

Tóm tắt

  • Commit là một mốc trạng thái của project, kèm lời mô tả.
  • Sửa file, git add vào staging area, rồi git commit.
  • git status cho biết file nào đã sửa, file nào mới. git log xem lịch sử.
  • Có .gitignore trước commit đầu tiên, không commit target/ và file chứa mật khẩu.

Tự kiểm tra

0/3 câu
Câu 1

Sửa Product.java và Order.java, chỉ git add Order.java rồi git commit. Commit mới có thay đổi của Product.java không?

Câu 2

git status báo một file là "Untracked". Nghĩa là gì?

Câu 3

Thư mục nào không nên commit trong project Maven?

Branch và merge

Nội dung bài

  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt