Commit và lịch sử
Nội dung bài · 5 mục
- 1.Khái niệm
- 2.Ví dụ
- 3.Thử ngay
- 4.Lỗi hay gặp
- 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 --onelinegit init -b maintạo kho Git (repository) trong thư mục hiện tại, nhánh chính tênmain.dotnet new gitignoretạo sẵn.gitignorecho 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.gitignoretrước khigit add.git add .đưa mọi file vào staging area,git commit -mtạo commit kèm lời mô tả.git log --onelinein 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 addvào staging area, rồigit commit. git statuscho biết file nào đã sửa, file nào mới.git logxem lịch sử.- Tạo
.gitignoretrước commit đầu tiên, không commitbin/,obj/và file chứa mật khẩu.
Tự kiểm tra
0/3 câuSử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?
git status báo một file là "Untracked". Nghĩa là gì?
Thư mục nào không nên commit trong project .NET?