# Git Safety Foundation Before Vibe Coding

## 1. Quá trình học tập
Qua quá trình học tập, tôi đã hiểu rõ hơn về các khái niệm cơ bản của Git như commit, branch, merge, xử lý conflict và cách khôi phục lại các thay đổi (revert/rollback). Tôi đã thực hành các lệnh này trên repository cá nhân để nắm vững cách thức hoạt động trước khi áp dụng vào thực tế với AI.

## 2. Danh sách lệnh Git đã sử dụng
Dưới đây là các lệnh Git chính tôi đã sử dụng trong suốt quá trình thực hành:

- `git init`: Khởi tạo repository mới.
- `git clone`: Copy repository từ xa về máy cục bộ.
- `git status`: Kiểm tra trạng thái các file.
- `git add <file>` / `git add .`: Thêm file vào staging area.
- `git commit -m "message"`: Lưu lại các thay đổi.
- `git branch`: Xem danh sách các branch.
- `git branch <branch-name>`: Tạo branch mới.
- `git checkout <branch-name>` / `git switch <branch-name>`: Chuyển đổi giữa các branch.
- `git merge <branch-name>`: Gộp branch vào branch hiện tại.
- `git push origin <branch-name>`: Đẩy branch lên GitHub.
- `git pull`: Lấy code mới nhất từ GitHub về.
- `git revert <commit-hash>`: Khôi phục lại một commit trước đó.
- `git log`: Xem lịch sử commit.

## 3. Tình huống thực hành Conflict
- **Nguyên nhân**: Tạo 2 branch khác nhau (`feature-1` và `feature-2`) cùng sửa một dòng trong cùng một file (ví dụ: `index.html`).
- **Quá trình**: Khi merge `feature-1` vào `main` thành công, tiếp tục merge `feature-2` vào `main` thì bị conflict.
- **Cách giải quyết**: 
  1. Mở file bị conflict, tìm các dòng có đánh dấu `<<<<<<<`, `=======`, `>>>>>>>`.
  2. Quyết định giữ lại code nào (hoặc kết hợp cả 2).
  3. Xóa các dấu nhắc của Git, lưu file lại.
  4. Chạy `git add .` và `git commit -m "Resolve conflict"`.

## 4. Tình huống thực hành Rollback / Revert
- **Tình huống**: Nhận ra commit trước đó có chứa code bị lỗi hoặc không cần thiết.
- **Cách thực hiện**: 
  1. Chạy `git log` để tìm mã hash của commit bị lỗi.
  2. Chạy `git revert <commit-hash>`.
  3. Git sẽ tự động tạo một commit mới đảo ngược lại các thay đổi của commit cũ. Viết message cho commit mới này và lưu lại.

## 5. Minh chứng hoàn thành Microsoft Learn

## 6. Trả lời câu hỏi: "Tôi sẽ dùng Git như thế nào khi Vibe Code với AI?"
Khi Vibe Code với AI, tôi sẽ dùng Git như một "lưới an toàn" để thoải mái thử nghiệm các đoạn code do AI tạo ra mà không sợ làm hỏng mã nguồn gốc.
Cụ thể:
1. **Luôn tạo branch mới** cho mỗi tính năng hoặc đề xuất lớn từ AI (ví dụ: `feature/ai-generated-login`).
2. **Commit thường xuyên** với các message rõ ràng, để dễ dàng quay lại (rollback/revert) nếu AI sinh ra code lỗi hoặc chạy không như ý.
3. **Review code kỹ càng** thông qua Pull Request trước khi merge code của AI vào branch `main`.
4. **Xử lý conflict một cách cẩn thận** nếu code AI sinh ra đụng độ với code tôi tự viết hoặc do người khác viết.
Tóm lại, Git giúp tôi tự tin và kiểm soát tốt hơn khi làm việc cùng AI, đảm bảo chất lượng và tính ổn định của dự án.


<!-- dummy commit cho screenshot -->
