1. Tổng quan.
Trong Git, mỗi file trong thư mục làm việc của bạn có thể ở một trong bốn trạng thái: Untracked
, Unmodified
, Modified
, và Staged
.
Dưới đây là giải thích về mỗi trạng thái:
- Untracked: File ở trạng thái Untracked là file mới được tạo hoặc được thêm vào thư mục làm việc mà Git chưa từng biết đến. Nói cách khác, file này chưa được Git theo dõi.
- Unmodified: File ở trạng thái Unmodified là file đã được Git theo dõi và không có thay đổi nào kể từ lần commit cuối cùng.
- Modified: File ở trạng thái Modified là file đã được Git theo dõi và có thay đổi kể từ lần commit cuối cùng nhưng chưa được thêm vào staging area.
- Staged: File ở trạng thái Staged là file đã được Git theo dõi, có thay đổi kể từ lần commit cuối cùng và đã được thêm vào staging area để chuẩn bị cho lần commit tiếp theo.
Lưu ý rằng mỗi file chỉ có thể ở một trong bốn trạng thái trên tại một thời điểm. Bạn có thể sử dụng lệnh git status
để kiểm tra trạng thái hiện tại của các file trong thư mục làm việc.
2. Thực hành.
Hãy chuẩn bị dự án để chúng ta thực hành như sau:
mkdir my-website
cd my-website/
echo 'Trang chu' > index.html
echo 'Lien he' > contact.html
echo 'Ve chung toi' > about.html
2.1. Khởi tạo git repository cho dự án my-website.
Lệnh git init
được sử dụng để khởi tạo một repository Git mới.
Khi bạn chạy lệnh này trong một thư mục, Git sẽ tạo một thư mục con mới có tên là .git
trong thư mục hiện tại. Thư mục .git
này chứa tất cả các thông tin cần thiết cho repository Git, bao gồm cấu trúc thư mục cho dữ liệu, tất cả các commit và tất cả các nhánh.
Sau khi thực hiện lệnh git init
, thư mục hiện tại sẽ trở thành một repository Git, và bạn có thể bắt đầu sử dụng các lệnh Git khác như git add
, git commit
, v.v. để theo dõi thay đổi, tạo commit và quản lý nhánh.
shell> git init
Initialized empty Git repository in /Users/hoanghd/My Drive/git/my-website/.git/
2.2. Sử dụng lệnh git status kiểm tra trạng thái repository.
Lệnh git status
được sử dụng để kiểm tra trạng thái của repository Git hiện tại. Nó cung cấp thông tin về nhánh hiện tại, các thay đổi chưa được commit, và các file chưa được theo dõi.
shell> git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
about.html
contact.html
index.html
nothing added to commit but untracked files present (use "git add" to track)
Lệnh git status
được sử dụng để hiển thị trạng thái của thư mục làm việc và staging area. Kết quả của lệnh cho thấy thông tin sau:
On branch main
: Bạn đang ở trên nhánhmain
.No commits yet
: Chưa có commit nào được thực hiện trên nhánh này.Untracked files
: Có một số file mới hoặc chưa được Git theo dõi. Cụ thể, các fileabout.html
,contact.html
, vàindex.html
đang ở trạng thái Untracked.nothing added to commit but untracked files present (use "git add" to track)
: Không có file nào được thêm vào staging area để chuẩn bị cho lần commit tiếp theo. Tuy nhiên, có một số file Untracked. Bạn có thể sử dụng lệnhgit add <file>
để thêm các file này vào staging area và bắt đầu theo dõi chúng bằng Git.
Nói cách khác, bạn có ba file mới (about.html
, contact.html
, index.html
) trong thư mục làm việc mà Git chưa bắt đầu theo dõi. Bạn có thể sử dụng lệnh git add
để thêm chúng vào staging area và chuẩn bị cho lần commit đầu tiên.
2.3. Đưa một file vào danh sách được Git theo dõi.
Bây giờ giả sử tôi đưa file about.html vào danh sách sẽ được Git theo dõi, tôi sử dụng lệnh git add <tên file được theo dõi>
.
git add about.html
2.4. Kiểm tra lại trạng thái của repository.
Dùng lệnh git status
để kiểm tra lại trạng thái của repository.
shell> git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: about.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
contact.html
index.html
Kết quả của lệnh cho thấy thông tin sau:
On branch main
: Bạn đang ở trên nhánhmain
.No commits yet
: Chưa có commit nào được thực hiện trên nhánh này.Changes to be committed
: Có một số thay đổi đã được thêm vào staging area và sẽ được bao gồm trong lần commit tiếp theo. Cụ thể, fileabout.html
đã được thêm vào staging area và đang ở trạng thái Staged.Untracked files
: Có một số file mới hoặc chưa được Git theo dõi. Cụ thể, các filecontact.html
vàindex.html
đang ở trạng thái Untracked.
Nói cách khác, bạn đã thêm file about.html
vào staging area và chuẩn bị cho lần commit đầu tiên. Tuy nhiên, vẫn còn hai file mới (contact.html
, index.html
) trong thư mục làm việc mà Git chưa bắt đầu theo dõi. Bạn có thể sử dụng lệnh git add
để thêm chúng vào staging area.
Chúng ta có thể sử dụng lệnh git add .
để đưa luôn 2 file index.html và contact.html vào staged để sẵn sàng cho 1 commit, sau đó kiểm tra lại bằng lệnh git status bạn sẽ thấy 3 file html đã ở trạng thái staged và sẵn sàng để commit
shell> git add .
shell> git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: about.html
new file: contact.html
new file: index.html
2.5. Thực hiện commit đầu tiên.
Thực hiện commit với lệnh git commit -m"<đặt tên cho commit>"
. Ví dụ:
shell> git commit -m"C1 - Khoi tao"
[main (root-commit) 248eedf] C1 - Khoi tao
3 files changed, 3 insertions(+)
create mode 100644 about.html
create mode 100644 contact.html
create mode 100644 index.html
Lệnh này sẽ tạo một commit mới với thông điệp “C1 – Khoi tao”. Mỗi commit đại diện cho một bản lưu trữ của toàn bộ dự án tại một thời điểm cụ thể.
- Kết quả bạn nhận được khi chạy lệnh là:
[main (root-commit) 248eedf] C1 - Khoi tao
: Đây là thông báo phản hồi từ Git sau khi thực hiện lệnh commit. “main” là nhánh hiện tại, “root-commit” cho biết đây là commit đầu tiên và “248eedf” là mã hash của commit.3 files changed, 3 insertions(+)
: Đây là thống kê về những thay đổi đã được thực hiện trong commit này. Cụ thể, có 3 file đã được thay đổi với tổng cộng 3 dòng được thêm vào.create mode 100644 about.html
,create mode 100644 contact.html
,create mode 100644 index.html
: Đây là danh sách các file mới được tạo trong commit này. “100644” là mã mode Unix, cho biết đây là một file bình thường và quyền truy cập của nó là “rw-r–r–“.
2.5. Hiển thị lịch sử commit của repository Git hiện tại.
Lệnh git log --oneline
được sử dụng để hiển thị lịch sử commit của repository Git hiện tại trong một dạng rút gọn, mỗi commit trên một dòng.
Ví dụ kết quả trả về từ lệnh này là:
shell> git log --oneline
248eedf (HEAD -> main) C1 - Khoi tao
Đây là thông tin về commit gần nhất trong repository.
248eedf
: Đây là mã hash rút gọn của commit, được sử dụng để định danh duy nhất cho mỗi commit.(HEAD -> main)
: Đây cho biết rằng con trỏ HEAD hiện đang trỏ đến nhánh “main”. HEAD là một con trỏ đặc biệt trong Git, chỉ đến commit mà bạn đang làm việc trên nó.C1 - Khoi tao
: Đây là thông điệp commit mà bạn đã cung cấp khi tạo commit.
Lệnh git log
mà bạn đã thực thi hiển thị lịch sử commit của repository Git hiện tại trong một định dạng chi tiết hơn so với git log --oneline
.
Kết quả trả về từ lệnh này là:
shell> git log
commit 248eedf165ea4d93c096faa1f65692d9ca2bdc53 (HEAD -> main)
Author: Hà Đăng Hoàng <hoanghd164@gmail.com>
Date: Tue Jan 30 14:00:19 2024 +0700
C1 - Khoi tao
commit 248eedf165ea4d93c096faa1f65692d9ca2bdc53 (HEAD -> main)
: Đây là mã hash đầy đủ của commit, cùng với thông tin về con trỏ HEAD hiện tại (đang trỏ đến nhánh “main”).Author: Hà Đăng Hoàng <hoanghd164@gmail.com>
: Đây là thông tin về người đã tạo commit, bao gồm tên và email.Date: Tue Jan 30 14:00:19 2024 +0700
: Đây là thời gian mà commit được tạo.C1 - Khoi tao
: Đây là thông điệp commit mà bạn đã cung cấp khi tạo commit.
Sau khi commit xong nếu bạn sử dụng lệnh git status
bạn sẽ thấy kết quả working tree clean
cho biết bạn đã commit thành công.
shell> git status
On branch main
nothing to commit, working tree clean
Dưới đây là phân tích chi tiết:
On branch main
: Đây cho biết bạn đang làm việc trên nhánh “main”.nothing to commit, working tree clean
: Đây cho biết không có thay đổi nào trong working tree (thư mục làm việc) chưa được commit. Nói cách khác, tất cả các thay đổi đã được commit và không có file mới hoặc file đã được sửa đổi chưa được theo dõi bởi Git.
2.6. Git có khả năng phát hiện file bị xóa.
Đầu tiên, bạn đã thực thi lệnh rm -rf index.html
trong terminal. Lệnh này xóa file index.html
từ thư mục làm việc của bạn.
rm -rf index.html
Sau đó, bạn đã thực thi lệnh git status
để kiểm tra trạng thái của repository Git.
shell> git status
On branch main
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: index.html
Kết quả trả về từ lệnh này là:
On branch main
: Đây cho biết bạn đang làm việc trên nhánh “main”.Changes not staged for commit:
: Đây cho biết có thay đổi trong thư mục làm việc chưa được đưa vào staging area (khu vực chuẩn bị cho commit).(use "git add/rm <file>..." to update what will be committed)
: Đây là gợi ý từ Git về cách thêm hoặc xóa các thay đổi từ staging area.(use "git restore <file>..." to discard changes in working directory)
: Đây là gợi ý từ Git về cách hủy bỏ các thay đổi trong thư mục làm việc.deleted: index.html
: Đây cho biết fileindex.html
đã bị xóa từ thư mục làm việc nhưng thay đổi này chưa được đưa vào staging area.
2.7. Git có khả năng khôi phục file bị xóa.
Đầu tiên, bạn đã thực thi lệnh git restore index.html
trong terminal. Lệnh này khôi phục file index.html
về trạng thái của nó trong commit gần nhất. Nói cách khác, nếu file đã bị sửa đổi hoặc xóa, lệnh này sẽ hủy bỏ các thay đổi đó.
git restore index.html
Sau đó, bạn đã thực thi lệnh ls -al
để liệt kê tất cả các file và thư mục (bao gồm cả các file và thư mục ẩn) trong thư mục hiện tại, cùng với thông tin chi tiết về chúng. Bạn sẽ thấy file index.html đã được khôi phục.
shell> ls -al
total 24
drwxr-xr-x@ 6 hoanghd staff 192 Jan 30 14:04 .
drwxr-xr-x@ 3 hoanghd staff 96 Jan 30 13:42 ..
drwxr-xr-x@ 12 hoanghd staff 384 Jan 30 14:04 .git
-rw-r--r--@ 1 hoanghd staff 13 Jan 30 13:43 about.html
-rw-r--r--@ 1 hoanghd staff 8 Jan 30 13:43 contact.html
-rw-r--r--@ 2 hoanghd staff 10 Jan 30 14:04 index.html
Dưới đây là ví dụ tôi xóa hết các file trong dự án và sử dụng lệnh git restore .
để khôi phục tất cả các file đã bị xóa.
shell> rm -rf about.html contact.html index.html
shell> git restore .
shell> ls -al
total 24
drwxr-xr-x@ 6 hoanghd staff 192 Jan 30 14:06 .
drwxr-xr-x@ 3 hoanghd staff 96 Jan 30 13:42 ..
drwxr-xr-x@ 12 hoanghd staff 384 Jan 30 14:06 .git
-rw-r--r--@ 2 hoanghd staff 13 Jan 30 14:06 about.html
-rw-r--r--@ 2 hoanghd staff 8 Jan 30 14:06 contact.html
-rw-r--r--@ 2 hoanghd staff 10 Jan 30 14:06 index.html
Hãy vào file index.html
và sửa đổi nội dung của nó,lưu lại và sử dụng lệnh git status bạn sẽ thấy file index.html đang ở trạng thái modified (đã bị sửa đổi).
shell> git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
Sau đó dùng lệnh git diff để hiển thị các thay đổi giữa các commit, commit và working tree, v.v. Trong trường hợp này, nó đang hiển thị sự khác biệt giữa file index.html
hiện tại trong working tree và phiên bản cuối cùng đã được commit.
Kết quả trả về từ lệnh này là:
shell> git diff
diff --git a/index.html b/index.html
index 558ef85..59e8879 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,3 @@
Trang chu
+
+Chao mung ban den voi Website của toi
Dưới đây là phân tích chi tiết:
diff --git a/index.html b/index.html
: Đây cho biết Git đang so sánh fileindex.html
trong hai phiên bản khác nhau.index 558ef85..59e8879 100644
: Đây là mã hash của fileindex.html
trong hai phiên bản đang được so sánh.--- a/index.html
và+++ b/index.html
: Dòng này cho biết phiên bản “a” của file (phiên bản cũ) và phiên bản “b” của file (phiên bản mới).@@ -1 +1,3 @@
: Đây là thông tin về dòng nào trong file đang được thay đổi. Trong trường hợp này, dòng đầu tiên của file cũ (-1
) và dòng từ 1 đến 3 của file mới (+1,3
) đang được so sánh.Trang chu
: Đây là nội dung của dòng đầu tiên trong phiên bản cũ của file.+Chao mung ban den voi Website của toi
: Dòng này cho biết nội dung đã được thêm vào file trong phiên bản mới. Dấu cộng (+
) ở đầu dòng cho biết nội dung này đã được thêm vào.
Giờ hãy thêm nó vào danh sách được Git theo dõi và tiến hành commit nó.
shell> git add .
shell> git commit -m"C2 - Sua doi index"
[main 17a15de] C2 - Sua doi index
1 file changed, 2 insertions(+)
Kiểm tra lại trạng thái git status bạn sẽ thấy thông báo “nothing to commit, working tree clean
” tức là đã commit thành công.
shell> git status
On branch main
nothing to commit, working tree clean
Dùng lệnh git log bạn cũng sẽ thấy bây giờ đã có 2 commit.
shell> git log
commit 17a15de3bd162120fbc4ad9893c2f33f8e562d0c (HEAD -> main)
Author: Hà Đăng Hoàng <hoanghd164@gmail.com>
Date: Tue Jan 30 14:10:32 2024 +0700
C2 - Sua doi index
commit 248eedf165ea4d93c096faa1f65692d9ca2bdc53
Author: Hà Đăng Hoàng <hoanghd164@gmail.com>
Date: Tue Jan 30 14:00:19 2024 +0700
C1 - Khoi tao
Nếu bạn muốn kiểm tra sự khác nhau giữa 2 commit, bạn có thể sử dụng lệnh git diff <commit 1> <commit 2> --stat
.
Ví dụ:
shell> git log --oneline
17a15de C2 - Sua doi index
248eedf C1 - Khoi tao
shell> git diff 17a15de 248eedf --stat
about.html | 2 +-
contact.html | 2 +-
trang1.html | 1 +
3 files changed, 3 insertions(+), 2 deletions(-)
2.8. Trường hợp trong repository có nhiều sự thay đổi.
Ví dụ sau đây chúng ta sẽ thay đổi lại nội dung các file contact.html, about.html và thêm mới trang1.html.
echo 'Lien he 2024' > contact.html
echo 'Gioi thieu website' > about.html
echo 'Day la trang 1' > trang1.html
Kết quả trả về từ lệnh git status
cho thấy trạng thái hiện tại của repository Git.
shell> git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: about.html
modified: contact.html
Untracked files:
(use "git add <file>..." to include in what will be committed)
trang1.html
no changes added to commit (use "git add" and/or "git commit -a")
Dưới đây là phân tích chi tiết:
On branch main
: Bạn đang làm việc trên nhánh “main”.Changes not staged for commit:
: Có thay đổi trong thư mục làm việc chưa được đưa vào staging area (khu vực chuẩn bị cho commit).modified: about.html
vàmodified: contact.html
: Hai file này đã được sửa đổi nhưng thay đổi chưa được đưa vào staging area.Untracked files:
: Có file mới hoặc file đã được sửa đổi chưa được theo dõi bởi Git.trang1.html
: File này chưa được Git theo dõi.no changes added to commit (use "git add" and/or "git commit -a")
: Không có thay đổi nào được thêm vào staging area để commit.
Bạn có thể sử dụng lệnh git add
để thêm thay đổi vào staging area hoặc git commit -a
để tự động thêm tất cả thay đổi của file đã được theo dõi vào staging area và commit chúng.
git add .
Kết quả của git status
cho thấy trạng thái hiện tại của repository Git sau khi bạn đã thêm tất cả các thay đổi trong thư mục làm việc vào staging area.
git add .
: Lệnh này thêm tất cả các thay đổi trong thư mục làm việc hiện tại vào staging area. Điều này bao gồm cả file mới, file đã sửa đổi và file đã xóa.On branch main
: Bạn đang làm việc trên nhánh “main”.Changes to be committed:
: Các thay đổi đã được thêm vào staging area và sẵn sàng để commit.modified: about.html
vàmodified: contact.html
: Hai file này đã được sửa đổi và thay đổi đã được thêm vào staging area.new file: trang1.html
: File mới này đã được thêm vào staging area.(use "git restore --staged <file>..." to unstage)
: Đây là gợi ý từ Git về cách để hủy bỏ thay đổi đã được thêm vào staging area (unstage).
shell> git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: about.html
modified: contact.html
new file: trang1.html
Sau khi thực hiện lệnh git add .
, tất cả các thay đổi đã được thêm vào staging area. Do đó nếu bạn sử dụng lệnh git diff
thì sẽ không còn sự khác biệt nào giữa working directory và staging area và git diff
không trả về kết quả.
git diff
Lưu ý: Lệnh git diff
mà không có tham số nào sẽ hiển thị sự khác biệt giữa working directory (thư mục làm việc) và staging area. Nếu không có sự khác biệt nào, nghĩa là tất cả các thay đổi đã được thêm vào staging area, lệnh này sẽ không trả về kết quả.
Tuy nhiên, lệnh git diff --staged
sẽ hiển thị sự khác biệt giữa staging area và commit cuối cùng. Kết quả trả về từ lệnh này cho thấy các thay đổi đã được thêm vào staging area và sẽ được commit khi bạn thực hiện lệnh git commit
.
shell> git diff
shell> git diff --staged
diff --git a/about.html b/about.html
index 156490f..278ac42 100644
--- a/about.html
+++ b/about.html
@@ -1 +1 @@
-Ve chung toi
+Gioi thieu website
diff --git a/contact.html b/contact.html
index f053adb..4c25767 100644
--- a/contact.html
+++ b/contact.html
@@ -1 +1 @@
-Lien he
+Lien he 2024
diff --git a/trang1.html b/trang1.html
new file mode 100644
index 0000000..54a4637
--- /dev/null
+++ b/trang1.html
@@ -0,0 +1 @@
+Day la trang 1
Mình sẽ tiến hành commit luôn.
shell> git commit -m"C3 - Update"
[main dcb2f81] C3 - Update
3 files changed, 3 insertions(+), 2 deletions(-)
create mode 100644 trang1.html
Mình đã commit thành công và bây giờ mình đã có 3 commit.
shell> git status
On branch main
nothing to commit, working tree clean
shell> git log
commit dcb2f81587da31690c742d4600accc9db7b26fe6 (HEAD -> main)
Author: Hà Đăng Hoàng <hoanghd164@gmail.com>
Date: Thu Feb 1 22:40:20 2024 +0700
C3 - Update
commit 17a15de3bd162120fbc4ad9893c2f33f8e562d0c
Author: Hà Đăng Hoàng <hoanghd164@gmail.com>
Date: Tue Jan 30 14:10:32 2024 +0700
C2 - Sua doi index
commit 248eedf165ea4d93c096faa1f65692d9ca2bdc53
Author: Hà Đăng Hoàng <hoanghd164@gmail.com>
Date: Tue Jan 30 14:00:19 2024 +0700
C1 - Khoi tao
Để xem tóm tắt các commit, sử dụng lệnh git log --oneline
.
shell> git log --oneline
dcb2f81 (HEAD -> main) C3 - Update
17a15de C2 - Sua doi index
248eedf C1 - Khoi tao
2.9. Khôi phục file từ một commit nào đó.
Khôi phục file index.html
về phiên bản tại commit có mã hash là 248eedf
. File index.html
trong thư mục làm việc sẽ được thay thế bằng phiên bản từ commit này và thay đổi này sẽ được thêm vào staging area.
git checkout 248eedf -- index.html
Hiển thị trạng thái của repository. Kết quả cho thấy file index.html
đã được sửa đổi và thay đổi đã được thêm vào staging area (Changes to be committed:
).
shell> git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: index.html
Hủy bỏ thay đổi đã được thêm vào staging area cho file index.html
(unstage). File index.html
trong thư mục làm việc vẫn giữ nguyên như phiên bản từ commit 248eedf
.
git restore --staged index.html
Hiển thị trạng thái của repository sau khi thực hiện lệnh git restore --staged
. Kết quả cho thấy file index.html
đã được sửa đổi nhưng thay đổi chưa được thêm vào staging area (Changes not staged for commit:
).
shell> git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
Hoặc nếu sử dụng lệnh git checkout
nhưng không truyền mã hash thì Git sẽ khôi phục file index.html
về trạng thái của nó trong commit cuối cùng. Nó sẽ loại bỏ tất cả các thay đổi chưa được commit đối với file index.html
trong thư mục làm việc.
git checkout -- index.html
Sau khi thực hiện lệnh này, git status
cho thấy không có gì để commit và working tree (thư mục làm việc) đang ở trạng thái sạch, tức là không có thay đổi nào chưa được commit. Điều này có nghĩa là tất cả các thay đổi bạn đã thực hiện đối với file index.html
đã bị loại bỏ.
shell> git status
On branch main
nothing to commit, working tree clean
2.10. Không theo dõi 1 file hoặc thư mục nào đó.
File .gitignore
trong một repository Git được sử dụng để cho Git biết những file hoặc thư mục nào không nên được theo dõi. Nói cách khác, những file hoặc thư mục được liệt kê trong .gitignore
sẽ không được Git theo dõi hoặc thêm vào repository.
Mỗi dòng trong file .gitignore
tương ứng với một mẫu, và bất kỳ file hoặc thư mục nào khớp với mẫu đó sẽ bị Git bỏ qua. Mẫu có thể là tên file cụ thể, hoặc có thể sử dụng các ký tự đại diện để khớp với nhiều file hoặc thư mục.
Ví dụ, nếu bạn có một file .gitignore
với nội dung sau:
*.log
temp/
Thì tất cả các file có phần mở rộng là .log
và thư mục temp/
sẽ không được Git theo dõi.
File .gitignore
rất hữu ích khi bạn muốn loại bỏ các file tạm thời, các file log, các file chứa cấu hình cục bộ hoặc các file chứa dữ liệu nhạy cảm khỏi repository.
Ví dụ mình tạo ra 1 file có đuôi là *.tmp
(ví dụ demo.tmp
) và tạo file .gitignore
truyền nội dung *.tmp
với mục đích là không cho Git theo dõi các file có đuôi là tmp
.
shell> echo 'demo temp' > demo.tmp
shell> echo '*.tmp' > .gitignore
shell> ls -al
total 48
drwxr-xr-x@ 9 hoanghd staff 288 Feb 1 22:50 .
drwxr-xr-x@ 3 hoanghd staff 96 Jan 30 13:42 ..
drwxr-xr-x@ 12 hoanghd staff 384 Feb 1 22:50 .git
-rw-r--r--@ 1 hoanghd staff 6 Feb 1 22:50 .gitignore
-rw-r--r--@ 1 hoanghd staff 19 Feb 1 22:36 about.html
-rw-r--r--@ 1 hoanghd staff 13 Feb 1 22:36 contact.html
-rw-r--r--@ 1 hoanghd staff 10 Feb 1 22:50 demo.tmp
-rw-r--r--@ 1 hoanghd staff 51 Feb 1 22:46 index.html
-rw-r--r--@ 1 hoanghd staff 15 Feb 1 22:36 trang1.html
Sử dụng lệnh git status
bạn sẽ chỉ thấy có 1 file mới tên là .gitignore
chưa được theo dõi còn file demo.tmp
hoàn toàn không xuất hiện trong danh sách này.
shell> git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
2.11. Cập nhật commit.
Trường hợp bạn có sự thay đổi về source code nhưng không muốn thêm mới commit mà chỉ muốn cập nhật nó thôi thì bạn có thể sử dụng git commit
với tham số --amend
ví dụ như sau:
shell> git commit --amend -m"C3 - Update, .gitignore"
[main 7d9f32c] C3 - Update, .gitignore
Date: Thu Feb 1 22:40:20 2024 +0700
3 files changed, 3 insertions(+), 2 deletions(-)
create mode 100644 trang1.html
Lệnh git commit --amend -m"C3 - Update, .gitignore"
được sử dụng để sửa đổi commit cuối cùng. Cụ thể, nó thay thế commit cuối cùng bằng một commit mới có nội dung commit message là “C3 – Update, .gitignore”. Tất cả các thay đổi trong staging area sẽ được bao gồm trong commit mới này.
Kết quả trả về từ lệnh này cho thấy:
[main 7d9f32c] C3 - Update, .gitignore
: Commit mới với mã hash là7d9f32c
đã được tạo trên nhánhmain
với commit message là “C3 – Update, .gitignore”.Date: Thu Feb 1 22:40:20 2024 +0700
: Thời gian commit được thực hiện.3 files changed, 3 insertions(+), 2 deletions(-)
: Tổng cộng có 3 file đã thay đổi, với 3 dòng được thêm vào và 2 dòng bị xóa.create mode 100644 trang1.html
: Filetrang1.html
mới đã được tạo.100644
là mã mode của Git cho một file bình thường.
Giờ đây nếu bạn list danh sách các commit bạn sẽ không thấy commit mới mà chỉ cập nhật lại commit cuối cùng mà thôi.
shell> git log --oneline
7d9f32c (HEAD -> main) C3 - Update, .gitignore
17a15de C2 - Sua doi index
248eedf C1 - Khoi tao