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 ShopApi, ShopApi.Tests và ShopDesk, rồi đưa cả ba vào một kho Git:

git init -b main
dotnet new gitignore
# mở .gitignore, thêm dòng appsettings.Development.json
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.
  • dotnet new gitignore tạo sẵn .gitignore cho project .NET, bỏ qua các thư mục do build sinh ra như bin/, obj/.
  • appsettings.Development.json đang chứa mật khẩu Oracle từ bài EF Core và DbContext. Mật khẩu không được commit, nên thêm file này 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 ShopApi/Program.cs, 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:   ShopApi/Program.cs

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")

ShopApi/Program.cs đã 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 trước khi có .gitignore. bin/, obj/ 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
dotnet new gitignore
git add .

Tốt hơn nữa là không để mật khẩu trong file của project: bài Cấu hình với appsettings khuyên dùng user-secrets.

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ử.
  • Tạo .gitignore trước commit đầu tiên, không commit bin/, obj/ và file chứa mật khẩu.

Tự kiểm tra

0/3 câu
Câu 1

Sửa Product.cs rồi chạy git commit -m "Sửa giá" mà chưa git add. Commit mới có thay đổi đó 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 .NET?

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