+2

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

image.png

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

image.png

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/

image.png

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.

image.png

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:

image.png

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:

image.png

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)

image.png

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

image.png

Ý 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

image.png

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí