MN
KHÁM PHÁ VÀ TRẢI NGHIỆM CÁ NHÂN
MN

1. Chức năng của lệnh Git Add

Lệnh git add trong Git được sử dụng để thêm các thay đổi trong thư mục làm việc (working directory) vào khu vực tạm thời (staging area), chuẩn bị cho việc commit. Dưới đây là các chức năng chính của lệnh git add:

1.1. Thêm tệp hoặc thư mục vào khu vực tạm thời (staging area)

  • Mục đích: Để đánh dấu các thay đổi trong tệp hoặc thư mục cụ thể và chuẩn bị chúng cho việc commit.
  • Ví dụ:
git add filename.txt

Lệnh này sẽ thêm tệp filename.txt vào khu vực tạm thời.

Thêm toàn bộ thư mục:

git add directory/
  • Lệnh này sẽ thêm tất cả các tệp trong thư mục directory/ vào khu vực tạm thời.

1.2. Thêm tất cả các thay đổi trong thư mục làm việc

  • Mục đích: Để thêm tất cả các tệp đã thay đổi, bao gồm cả tệp mới và tệp đã bị xóa, vào khu vực tạm thời.
  • Ví dụ:
git add .

Lệnh này sẽ thêm tất cả các thay đổi trong thư mục hiện tại vào khu vực tạm thời.

Thêm tất cả các thay đổi trong repository:

git add -A
  • Lệnh này sẽ thêm tất cả các thay đổi trong repository vào khu vực tạm thời, kể cả việc xóa tệp.

1.3. Thêm các thay đổi theo mẫu tệp (Pattern Matching)

  • Mục đích: Để thêm các tệp dựa trên một mẫu hoặc phần mở rộng cụ thể.
  • Ví dụ:
git add *.js
  • Lệnh này sẽ thêm tất cả các tệp .js trong thư mục hiện tại vào khu vực tạm thời.

1.4. Chọn lọc phần thay đổi trong tệp (Interactive Staging)

  • Mục đích: Để chọn từng phần thay đổi cụ thể trong một tệp và chỉ thêm những phần đó vào khu vực tạm thời.
  • Ví dụ:
git add -p filename.txt
  • Lệnh này sẽ cho phép bạn duyệt qua từng thay đổi trong filename.txt và chọn những thay đổi nào muốn thêm vào khu vực tạm thời.

1.5. Cập nhật các tệp đã được theo dõi

  • Mục đích: Để thêm các thay đổi từ các tệp đã được Git theo dõi, mà không thêm các tệp mới không được theo dõi (untracked files).
  • Ví dụ:
git add -u
  • Lệnh này sẽ cập nhật khu vực tạm thời với các thay đổi từ các tệp đã được theo dõi (các tệp bị thay đổi, bị xóa), nhưng không thêm tệp mới.

1.6. Đánh dấu xung đột đã được giải quyết

  • Mục đích: Sau khi giải quyết xung đột (merge conflicts), bạn cần sử dụng git add để đánh dấu tệp đã được giải quyết.
  • Ví dụ:
git add conflicted_file.txt
  • Lệnh này sẽ đánh dấu conflicted_file.txt là đã được giải quyết, chuẩn bị cho commit tiếp theo.

1.7. Lưu trữ tạm thời thay đổi chưa thêm vào (Stash)

  • Mục đích: Trong một số tình huống, git add có thể được sử dụng trước khi sử dụng git stash để chỉ lưu trữ những thay đổi đã được thêm vào khu vực tạm thời.
  • Ví dụ:
git add . && git stash
  • Lệnh này sẽ thêm tất cả các thay đổi vào khu vực tạm thời và sau đó lưu trữ chúng trong stash, loại bỏ các thay đổi khỏi thư mục làm việc.

1.8. Giai đoạn thêm các thay đổi cho commit tiếp theo

  • Mục đích: git add là bước đầu tiên trong quá trình commit. Sau khi các thay đổi được thêm vào khu vực tạm thời, bạn có thể thực hiện commit để lưu lại các thay đổi này.
  • Ví dụ:
git add file1.txt
git commit -m "Add changes to file1.txt"
  • Lệnh này sẽ thêm file1.txt vào khu vực tạm thời và sau đó commit thay đổi với thông điệp.

1.9. Tổng kết:

Lệnh git add là công cụ để quản lý những thay đổi trong dự án, giúp bạn kiểm soát những gì sẽ được lưu lại trong lịch sử của repository. Nó cho phép bạn chọn lọc các thay đổi cần thiết để thêm vào khu vực tạm thời trước khi commit, giúp việc quản lý mã nguồn trở nên linh hoạt và chính xác hơn.

2. Phân loại file trong thư mục làm việc (working directory)

Trong Git, thư mục làm việc (working directory) có thể chứa nhiều loại tệp khác nhau tùy thuộc vào trạng thái của chúng. Dưới đây là các loại tệp chính mà bạn có thể gặp trong thư mục làm việc của mình:

2.1. Tracked Files (Các tệp được theo dõi)

  • Mô tả: Đây là các tệp đã được Git theo dõi, tức là các tệp đã từng được thêm vào Git thông qua lệnh git add và đã được commit ít nhất một lần.
  • Các trạng thái chính của Tracked Files:
    • Unmodified (Không thay đổi): Các tệp này không có bất kỳ thay đổi nào kể từ lần commit cuối cùng. Chúng nằm trong trạng thái sạch sẽ (clean).
    • Modified (Đã thay đổi): Các tệp này đã được chỉnh sửa kể từ lần commit cuối cùng nhưng chưa được thêm vào khu vực tạm thời (staging area).
    • Staged (Đã thêm vào khu vực tạm thời): Các tệp đã được thay đổi và sau đó được thêm vào khu vực tạm thời bằng lệnh git add. Chúng sẵn sàng để commit trong lần commit tiếp theo.

2.2. Untracked Files (Các tệp chưa được theo dõi)

  • Mô tả: Đây là các tệp mà Git không theo dõi. Các tệp này chưa bao giờ được thêm vào Git bằng lệnh git add, do đó Git không nhận biết về chúng. Chúng tồn tại trong thư mục làm việc nhưng không nằm trong lịch sử phiên bản của repository.
  • Các trạng thái chính của Untracked Files:
    • Untracked: Đây là trạng thái duy nhất của các tệp chưa được theo dõi. Chúng hoàn toàn không liên quan đến các commit hiện tại cho đến khi bạn thêm chúng vào khu vực tạm thời với lệnh git add.

2.3. Ignored Files (Các tệp bị bỏ qua)

  • Mô tả: Đây là các tệp mà bạn đã chỉ định cho Git bỏ qua, thường thông qua một tệp .gitignore. Các tệp này sẽ không được Git theo dõi, thêm vào khu vực tạm thời hoặc commit.
  • Ví dụ: Các tệp nhị phân, tệp tạm thời, tệp log, hoặc các tệp cấu hình môi trường mà bạn không muốn theo dõi trong Git có thể được thêm vào .gitignore.

2.4. Deleted Files (Các tệp bị xóa)

  • Mô tả: Đây là các tệp đã được xóa khỏi thư mục làm việc nhưng vẫn còn trong lịch sử commit của Git. Khi xóa tệp bằng lệnh git rm hoặc trực tiếp xóa nó từ hệ thống tệp, Git sẽ nhận diện sự xóa bỏ này.
  • Các trạng thái chính của Deleted Files:
    • Staged for Deletion (Sẵn sàng cho việc xóa): Nếu bạn xóa một tệp đã được theo dõi và thêm thay đổi này vào khu vực tạm thời bằng lệnh git rm, tệp đó sẽ ở trạng thái “Staged for Deletion” và sẽ bị xóa trong lần commit tiếp theo.

2.5. Renamed/Relocated Files (Các tệp được đổi tên/chuyển vị trí)

  • Mô tả: Git có thể nhận diện khi một tệp đã được đổi tên hoặc di chuyển sang một vị trí mới trong cây thư mục.
  • Trạng thái:
    • Renamed: Khi một tệp được đổi tên hoặc di chuyển, Git có thể nhận diện điều này và đánh dấu nó là “renamed”. Git lưu giữ thông tin về lịch sử của tệp, ngay cả khi tên hoặc vị trí của tệp thay đổi.

2.6. Conflicted Files (Các tệp bị xung đột)

  • Mô tả: Khi bạn thực hiện một thao tác hợp nhất (merge) hoặc rebase và có xung đột giữa các thay đổi trong các nhánh khác nhau, các tệp bị ảnh hưởng sẽ ở trạng thái xung đột.
  • Trạng thái:
    • Unmerged: Các tệp này yêu cầu bạn giải quyết xung đột thủ công trước khi có thể tiếp tục với merge hoặc rebase. Sau khi xung đột được giải quyết, bạn cần sử dụng git add để thêm tệp đã giải quyết vào khu vực tạm thời.

2.7. Tổng kết:

Trong Git, các tệp trong thư mục làm việc được phân loại thành nhiều trạng thái khác nhau dựa trên sự thay đổi của chúng và cách chúng được quản lý trong Git. Hiểu rõ các trạng thái này giúp bạn kiểm soát được những gì đang diễn ra trong repository của mình, giúp việc quản lý mã nguồn hiệu quả hơn và tránh các xung đột không cần thiết.