[Git] Hiểu thêm về Commit và Staging Area [NEW]

Trong bài viết tạo kho lưu trữ cho Git, tôi đã đề cập đến cụm từ Khu vực dàn dựng và một tính năng là làm (ủy thác), vậy 2 cái này là gì, mình sẽ giải thích kỹ hơn trong bài viết này để các bạn biết cách sử dụng chính xác.

Staging Area là gì?

Khu vực dàn dựng có nghĩa là một khu vực mà nó sẽ được chuẩn bị cho quá trình cam kết. Trước hết, bạn cần hiểu rằng trong các hệ thống kiểm soát phiên bản (Version Control System), dữ liệu sẽ được lưu trữ ở hai nơi, một là thư mục bạn đang làm việc trên máy tính (cây làm việc, tôi không biết làm thế nào sử dụng nó). một lần nữa) và một là kho lưu trữ sau khi bạn đã thực hiện các thay đổi (ví dụ: kho lưu trữ trên Github).

Nhưng với Git, nó có thêm một tùy chọn, đó là thêm một khu vực trung gian được gọi là Khu vực dàn dựng và đây là một lợi thế lớn của Git. Staging Area có nghĩa là khu vực mà các thay đổi của bạn sẽ được lưu trữ trên tệp để nó có thể được cam kết, vì để cam kết bất kỳ tệp nào, tệp đó phải nằm trong Khu vực dàn. Một tệp trong Khu vực giai đoạn sẽ có trạng thái Bị gắn thẻ (xem thêm bên dưới).

[Git] Hiểu thêm về Commit và Staging Area [NEW]

Mô hình giải thích cách hoạt động của Khu vực dàn dựng.

Và để bao gồm một tệp trong Staging Area, bạn sẽ cần sử dụng lệnh git add tên_file Tôi đã đưa ra một ví dụ trong phần trước.

Cam kết là gì và nó hoạt động như thế nào?

Nói một cách đơn giản hơn, commit có nghĩa là một hành động để Git lưu ảnh chụp nhanh (snapshot) các thay đổi trong thư mục làm việc và các tệp và thư mục đã thay đổi phải nằm trong Staging Area. Mỗi lần cam kết, nó sẽ lưu lại lịch sử chỉnh sửa của mã nguồn cùng với tên và địa chỉ email của người cam kết. Ngoài ra, trong Git bạn cũng có thể rollback các tập tin trong lịch sử cam kết của nó để tách thành một nhánh khác, đây là chìa khóa giúp bạn dễ dàng rollback các thay đổi trước đó của mình. được giới thiệu trong phần giới thiệu về loạt bài này.

Và tất nhiên, lệnh cam kết trong Git sẽ là git commit -m "Lời nhắn".

Và nếu bạn Nếu bạn muốn đưa tệp vào kho lưu trữ, bạn phải cam kết trước. và sau đó là lệnh git push origin master sẽ chịu trách nhiệm đưa tất cả các tệp đã cam kết vào kho lưu trữ.

Điều kiện để cam kết một tệp là gì?

Nếu bạn muốn xác nhận một tệp, bạn sẽ cần phải theo dõi tệp đó bằng lệnh git add tên_file. Trong git có hai loại trạng thái chính, Đã theo dõi và Không theo dõi, cụ thể:

  • Theo dõi – Một tệp đã được theo dõi trong Git để bạn làm việc. Và trạng thái Theo dõi nó sẽ có các trạng thái con khác là Unmodified (chưa chỉnh sửa), Modified (đã chỉnh sửa) và Staged (sẵn sàng cam kết).
  • Không theo dõi – Tệp còn sót lại mà bạn sẽ không muốn làm việc trong Git.

Nhưng bạn nên biết rằng nếu tệp được Theo dõi nhưng ở trạng thái Đã sửa đổi, nó sẽ vẫn không thể cam kết và bạn phải đưa nó trở lại Staged bằng lệnh tương tự git add.

Bỏ qua giai đoạn sẽ cam kết

Như tôi đã đề cập ở trên, sau khi một tệp được thay đổi hoặc tạo, nó phải được thêm vào Staging Area bằng lệnh git add. Tuy nhiên, bạn có thể bao gồm một tệp được theo dõi để cam kết mà không cần đưa nó vào Khu vực giai đoạn với tham số -a chỉ huy git commit. Ví dụ: git commit -a -m "Skipped Staging Are to commit".

Tìm hiểu thêm về trạng thái

Đang đợi trạng thái của tệp

Đang đợi trạng thái của tệp

Không theo dõi

Nếu bạn tạo hoặc thêm tệp mới vào thư mục làm việc của mình, tệp đó sẽ ở trạng thái Không theo dõi. Bây giờ tôi cố gắng tạo một tệp mới có tên faq.htmlsau đó sử dụng lệnh git status để xem trạng thái của Git trong thư mục làm việc.

$ touch faq.html
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
 (use "git add <file>..." to include in what will be committed)

 faq.html

nothing added to commit but untracked files present (use "git add" to track)

Ghi chú: Yêu cầu touch là tạo một tệp trống.

Bây giờ bạn sẽ thấy nó liệt kê các tên tệp ở trạng thái Không theo dõi. Để đưa nó về Đã theo dõi, bạn sẽ sử dụng lệnh git add và xem xét trạng thái của nó.

$ git add faq.html
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
 (use "git reset HEAD <file>..." to unstage)

 new file: faq.html

Bây giờ bạn thấy đấy, tệp faq.html của tôi đã được đưa trở lại Staged và nó có thể được cam kết. Tại sao? Bởi vì bạn phải biết rằng nếu một tệp ở trạng thái Chưa được kiểm tra được đưa trở lại Theo dõi thì nó sẽ ở trạng thái Staged mãi mãi, trừ khi bạn thay đổi nội dung của tệp này, nó sẽ trở về trạng thái Đã sửa đổi và nó không thể thay đổi được. cam kết trừ khi bạn gõ lệnh git add cho nó.

Theo dõi

Khi một tệp được Theo dõi, nó có thể thay đổi giữa 3 trạng thái khác nhau: Đã sửa đổi, Không sửa đổiTheo giai đoạn.

Trước hết, bây giờ tôi có một tệp mới đã được đưa trở lại Staged bằng lệnh git add như ví dụ trên. Bây giờ tôi tiến hành thay đổi nội dung của tệp faq.html này và xem kết quả của lệnh git status.

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
 (use "git reset HEAD <file>..." to unstage)

 new file: faq.html

Changes not staged for commit:
 (use "git add <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)

 modified: faq.html

Bạn có thấy sự kỳ lạ trong hồ sơ không faq.html không? Tức là nó được hiển thị ở hai trạng thái Staged (có thể cam kết) và Modified (không thể bắt buộc) hay còn gọi là Unstaged. Lý do lạ ở đây là vì bạn đã tạo tệp trước đó faq.html và được đưa trở lại Theo dõi, nó cũng đã được đưa trở lại Staged để có thể cam kết. Tuy nhiên, sau đó bạn chỉnh sửa nội dung của nó, vì vậy nó có một phiên bản khác ở trạng thái Đã sửa đổi (không thể cam kết). Nếu bây giờ bạn nhập git commit để cam kết, ảnh chụp nhanh của tệp faq.html lần cuối cùng bạn nhập git add sẽ được cam kết, nhưng nó sẽ không chứa nội dung bạn vừa thêm. Và để nó có thể commit tệp faq.html đã chỉnh sửa, bạn phải gõ lại lệnh git add faq.html Lại.

Chuyển tệp từ Chưa được theo dõi sang Được theo dõi

Trong Git, bạn có thể đưa một tệp từ Đã theo dõi sang Không theo dõi bằng lệnh rm name_file. Lệnh rm sẽ giúp bạn đưa tập tin về trạng thái Untracked nhưng không xóa hoàn toàn khỏi ổ cứng.

$ rm faq.html
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
 (use "git add/rm <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)
deleted: faq.html

Nếu bạn muốn xóa nó, hãy sử dụng lệnh git rm -f tên_file hãy cẩn thận khi sử dụng lệnh này.

Phần kết

Có thể bạn sẽ thấy những gì tôi nói trong bài này hơi dài, nhưng đó là những kiến ​​thức rất cơ bản về Git mà bạn cần biết vì nếu bạn chưa hiểu rõ về vòng đời của một tập tin trong Git thì chắc chắn điều này khi làm việc bạn sẽ Bạn sẽ bối rối khi gõ lệnh git commit và liên tục hỏi tại sao nó không thể commit vì để commit bạn sẽ phải đưa nó về trạng thái thích hợp, tức là trạng thái Staged.

5/5 – (1 phiếu bầu)

Tiếp tục đọc trong bộ truyện