Khởi tạo Git Repository và vòng đời của một file trong Git (Untracked → Staged → Committed)
Khi bắt đầu học Git, nhiều bạn thường bị “rối” ở các bước: git init, git add, git commit, và đặc biệt là các trạng thái như untracked / modified / staged. Bài viết này sẽ hướng dẫn bạn tạo Git repository từ đầu và hiểu rõ vòng đời của một file trong Git qua một ví dụ rất đơn giản.
1) Tạo Git repository cho project
Để tạo Git repository, trước tiên bạn cần mở Terminal (Git Bash) và đi tới thư mục project mà bạn muốn quản lý bằng Git.
Nếu bạn chưa có project nào, bạn có thể tạo một thư mục rỗng trước, sau đó khởi tạo Git trong đó và bắt đầu phát triển.
a. Kiểm tra vị trí hiện tại của Terminal
Trong Git Bash, dùng:
pwd

b. Liệt kê thư mục và file
Để liệt kê danh sách thư mục/file trong thư mục hiện tại, dùng lệnh:
ls

Như trong ví dụ trên, kết quả trả về là:
exampleFile.txt resource/
Tương ứng có 1 file tên exampleFile.txt và 1 folder tên resource
c. Tạo Git Repository
Sau khi đã vào đúng folder project, chạy:
git init
Nếu thành công, Git sẽ hiển thị kiểu như:
Initialized empty Git repository in <folder>/.git/

2) Thư mục .git là gì và vì sao bạn không thấy nó?
Ngay sau khi git init, nếu bạn chạy lại:
ls
Bạn có thể… vẫn không thấy gì thay đổi. Lý do là vì .git là thư mục ẩn (hidden directory).
Trên Windows: bạn cần bật tùy chọn Show hidden files để nhìn thấy thư mục .git.

Thư mục .git chính là “database” của Git trong project:
-
Lưu toàn bộ lịch sử commit
-
Lưu metadata, object, refs, cấu hình…
Nếu xóa thư mục .git là mất toàn bộ lịch sử Git của project
3) git commit thực sự làm gì?
Một hiểu lầm phổ biến: git commit không phải là “di chuyển file vật lý” đi đâu đó.
Thực tế, commit là:
-
Lưu trạng thái (snapshot) của project tại thời điểm đó
-
Ghi nhận lịch sử thay đổi vào Git repository
-
Tạo ra một mốc để bạn có thể so sánh, rollback, review…
Nhưng để commit được, file thường phải đi qua các bước: Working Directory → Staging Area → Repository.
4) Thực hành: tạo file mới và quan sát trạng thái trong Git
Tạo file first_file.txt (chưa cần nội dung), rồi chạy:
git status
Git sẽ trả kết quả như sau:

On branch main: Bạn đang ở nhánh main
No commits yet: Chưa có commit nào
Untracked files: (use "git add <file>..." to include in what will be committed) first_file.txt.txt -> File first_file.txt đang thuộc nhóm Untracked files
nothing added to commit but untracked files present (use "git add" to track): Chưa có gì để commit vì mới chỉ có file chưa được theo dõi
=>Tại thời điểm này, file đang ở trạng thái untracked — Git chưa quản lý file này.
5) Chỉnh sửa file nhưng Git vẫn báo Untracked (vì sao?)
Thêm nội dung vào first_file.txt:
This is my first file
Lưu lại, chạy lại:
git status
Git vẫn cho kết quả tương tự là untracked.
Lý do:
-
File vẫn nằm ở working directory
-
Git chưa “đưa file vào danh sách theo dõi”
-
Git chỉ bắt đầu theo dõi file sau khi bạn add nó vào staging area
6) Thêm file vào Staging Area
Vậy để đưa file vào danh sách theo dõi, chúng ta cần add file:
Nếu muốn chỉ định add một file cụ thể:
git add <tên file>
Hoặc nếu muốn add toàn bộ file
git add .
Sau đó:
git status
Bạn sẽ thấy:

first_file.txt chuyển sang trạng thái Changes to be committed
Nói cách khác: file đã nằm trong staging area (đã được “xếp vào danh sách chờ commit”)
7) Commit code (best practice)
Sau khi đưa file vào trạng thái Staged, chúng ta cần chuyển sang trạng thái Committed.
Khi commit cần commit với message rõ ràng:
git commit -m "first file commit"
-m dùng để thêm commit message ngay trên command line
Đây là best practice khi commit (message nên ngắn gọn, mô tả đúng thay đổi)

1 file thay đổi (1 file changed)
Thêm 1 dòng (1 insertion(+))
File mới được tạo (create mode 100644 first_file.txt.txt)
Kiểm tra lại:
git status
Nếu mọi thứ ổn, bạn sẽ thấy:
nothing to commit, working tree clean

Ý nghĩa: working directory và staging area đang “sạch”, không có thay đổi chưa được ghi nhận.
8) Git bắt đầu theo dõi file: Modified xuất hiện như thế nào?
Bây giờ first_file.txt đã là file tracked.
Hãy sửa file, thêm dòng:
Be the change you want to see
Lưu lại và chạy:
git status

Git báo:
Modified: first_file.txt
Ý nghĩa: file đã thay đổi so với lần commit gần nhất nhưng chưa được đưa vào staging.
9) Bỏ theo dõi (untrack) một file đã từng được tracked
Trong một số trường hợp (ví dụ: lỡ commit file cấu hình chứa thông tin nhạy cảm), bạn muốn Git ngừng theo dõi file, nhưng vẫn giữ file ở máy.
Dùng:
git rm --cached <ten-file>
Ví dụ:
git rm --cached first_file.txt
Sau đó kiểm tra:
git status
Bạn sẽ thấy file bị loại khỏi index (staging/index timeline) và quay về nhóm untracked.
Lưu ý:
--cached nghĩa là chỉ xóa khỏi Git index, không xóa file vật lý trong thư mục project.
10) git commit -am "message" là gì? Dùng khi nào?
Lệnh:
git commit -am "message"
Thực chất là viết tắt của:
git add (chỉ add các file đã tracked và đang modified)
rồi git commit
- Lưu ý:
-a chỉ áp dụng cho file đã được tracked trước đó
Nó không add được file mới (untracked)
Nếu bạn có file mới, bạn vẫn phải:
git add <file-mới>
git commit -m "message"
Kết luận
Vòng đời của một file trong Git
Một file thường đi qua các trạng thái sau:
Untracked: Git chưa theo dõi (chưa add)
Staged: đã git add, sẵn sàng commit
Committed: đã git commit, được lưu snapshot trong Git repository
Modified: file tracked bị thay đổi sau commit
Nếu nắm vững các trạng thái này, bạn sẽ hiểu Git “đang làm gì” mỗi khi chạy git status, và tránh được phần lớn lỗi nhập môn.
All rights reserved