Chuyển đến nội dung chính

Cách xóa tệp khỏi kho Git mà không làm hỏng dự án của bạn

Tìm hiểu cách xóa tệp trong kho Git, tránh lỗi thường gặp, và quản lý kho gọn gàng ngay cả trong tình huống phức tạp hoặc nhạy cảm.
· 15 phút đọc

Khám phá cùng AI

Xóa tệp trong Git không phải lúc nào cũng đơn giản như tưởng. Bạn xóa một tệp khỏi hệ thống của mình, nhưng điều đó không có nghĩa là nó đã biến mất khỏi kho. Nó có thể vẫn tồn tại trong lịch sử, hoặc tệ hơn, bị commit nhầm, như một tệp cấu hình hoặc khóa API.

Trong hướng dẫn này, bạn sẽ học cách xóa tệp khỏi Git. Chúng ta sẽ bắt đầu với các lệnh cơ bản như git rm, rồi đi vào các phương pháp nâng cao hơn như dọn dẹp tệp chưa được theo dõi và chỉnh sửa lịch sử commit.

Yêu cầu tiên quyết

Trước khi xóa tệp bằng Git, hãy đảm bảo mọi thứ đã được thiết lập.

Trước tiên, kiểm tra xem Git đã được cài đặt chưa. Mở terminal và chạy:

git --version

Nếu bạn thấy số phiên bản, bạn có thể bắt đầu. 

Installing git

Nếu bạn thấy số phiên bản, bạn có thể bắt đầu.

Bạn cũng có thể cài một Git GUI như GitHub Desktop, Sourcetree hoặc GitKraken nếu thích giao diện trực quan. Nhưng trong hướng dẫn này, tôi sẽ dùng dòng lệnh (Git Bash).

Hãy chắc chắn bạn có quyền thay đổi kho, đặc biệt nếu bạn là thành viên nhóm hoặc làm việc với kho từ xa như GitHub hay GitLab.

Lưu ý: Một số thao tác xóa tệp không thể hoàn tác. Vì vậy, tốt nhất là sao lưu dự án hoặc ít nhất kiểm tra kỹ trạng thái kho trước khi chạy bất kỳ lệnh nào xóa tệp.

Xong rồi thì bắt đầu nhé.

Xóa tệp cơ bản trong Git

Có vài cách khác nhau để xóa tệp trong Git, tùy vào mục đích của bạn. Hãy xem một số lựa chọn phổ biến:

Dùng git rm

Lệnh git rm xóa tệp khỏi kho Git. Khi bạn chạy, hai việc xảy ra:

  • Git xóa tệp khỏi thư mục làm việc
  • Và stage thay đổi đó cho lần commit tiếp theo

Nhưng Git không chỉ xóa tệp. Nó ghi nhận việc xóa trong lịch sử. Khi bạn commit, tệp được chính thức gỡ khỏi dự án.

git rm file1.txt

deleting a file using the git rm command.

Bạn có thể xóa một tệp, nhiều tệp hoặc một nhóm tệp bằng wildcard. 

Ví dụ, để xóa tất cả tệp log:

git rm *.log

Điều này báo Git xóa mọi tệp trong thư mục kết thúc bằng .log. Bạn có thể xác nhận thay đổi bằng:

git status

Deleting multiple files with one git rm command.

Xóa nhiều tệp chỉ với một lệnh git rm. Ảnh: Tác giả.

Muốn xóa mọi tệp trong một thư mục nhưng giữ nguyên thư mục? Dùng:

git rm temp/*

Lệnh này xóa mọi tệp trong thư mục temp mà không xóa chính thư mục.

Deleting files inside a folder using git rm command.

Git cũng bổ sung một số kiểm tra an toàn. Nếu tệp có thay đổi chưa được commit, Git sẽ không xóa trừ khi bạn ép buộc. Chỉ dùng nếu bạn chắc chắn có thể loại bỏ các thay đổi đó:

git rm -f

Removing uncommitted file using the -f option.

Để xóa cả một thư mục và mọi thứ bên trong, thêm cờ -r:

git rm -r testfolder

Lệnh này xóa testfolder và tất cả tệp trong đó.

Removing the entire folder and its content using the git rm -r command.

Giờ để commit thay đổi, chạy lệnh sau:

git commit -m "removed log files”

Commit the deletion with git commit command.

Tùy chọn chính của git rm

Dưới đây là các tùy chọn thường dùng với git rm:

1. <filename>

Cách dùng cơ bản. Liệt kê các tệp bạn muốn xóa:

git rm file1.txt file2.txt

Bạn cũng có thể dùng wildcard để xóa nhiều tệp cùng loại. Ví dụ, để xóa tất cả tệp .txt:

git rm *.txt

(Ở đây, * nghĩa là tất cả. Nó khớp mọi tên tệp kết thúc bằng .txt.)

2. --cached

Tùy chọn này xóa tệp khỏi kho nhưng giữ lại trên máy của bạn. Giả sử tôi lỡ thêm một tệp nhạy cảm như config.env. Tôi không muốn nó trong kho, nhưng vẫn cần trên máy. Vậy tôi sẽ chạy:

git rm --cached config.env

Ở đây, git rm sẽ xóa khỏi kho và thư mục làm việc. Còn --cached ngừng theo dõi tệp trong Git (nên sẽ không bị push), nhưng vẫn giữ tệp vật lý tại chỗ.

Để tránh bị thêm lại, thêm nó vào .gitignore:

echo config.env >> .gitignore

Stop tracking the file using the --cached option in git rm.

3. -r

Viết tắt của recursive. Thay vì một tệp, tùy chọn này xóa đệ quy thư mục và nội dung của nó. Nếu không có cờ này, Git sẽ báo lỗi khi bạn thử xóa thư mục.

git rm -r <folder-name>

Ở đây, tôi tạo một thư mục tên testfolder và hai tệp bên trong: a.txt và b.txt. Sau đó tôi chạy lệnh:

git rm -r testfolder

Lệnh này xóa thư mục cùng toàn bộ nội dung bên trong

Remove the entire folder using the -r option.

4. --dry-run

Nếu bạn chưa chắc điều gì sẽ xảy ra khi xóa tệp, hãy dùng git rm với tùy chọn --dry-run như sau:

git rm --dry-run <filename>

Đây là cách an toàn để xem trước những gì sẽ bị xóa. 

Preview the files before removing with the --dry-run option.

Hoặc nếu bạn đang dọn dẹp tệp chưa được theo dõi và muốn kiểm tra kỹ những gì sẽ bị xóa, dùng:

git clean -n

Lệnh này chỉ hiển thị những gì sẽ bị xóa.

Preview the untracked file before deleting with git clean -n command.

Phân tích quy trình so sánh

Có nhiều cách để xóa tệp trong Git. Các phương pháp có vẻ giống nhau, nhưng cách chúng hoạt động thì không.

git rm so với xóa thủ công

Giả sử có tệp file.txt. Tôi không cần nó nữa.

Một cách xóa là xóa trực tiếp từ hệ thống.

Trên Linux, macOS, hoặc Git Bash:

rm file.txt

Trên Windows (command prompt): 

del file.txt

Remove the file with rm command and check the status with git status command.

Cách này xóa tệp khỏi thư mục của bạn. Nhưng Git chưa biết điều đó. Vì vậy bạn phải báo cho Git rằng tệp đã bị xóa:

git add file.txt

Lệnh này stage việc xóa để được đưa vào lần commit tiếp theo.

Stage the deletion with the git add command.

Nếu bạn xóa vài tệp và không nhớ hết, có thể chạy:

git add -u

Lệnh này stage tất cả tệp đã theo dõi bị thay đổi hoặc xóa. Nó sẽ không bao gồm tệp chưa được theo dõi.

Giờ bạn commit thay đổi:

git commit -m "Remove file.txt"

Nếu bạn dùng git rm, nó xử lý mọi thứ trong một bước. Nó xóa tệp và stage thay đổi ngay lập tức:

git rm file.txtgit commit -m "Remove file.txt"

Không cần chạy git add riêng. Cách này gọn hơn và tránh quên stage việc xóa.

The git rm command deletes and stages the file in one go.

Tóm lại:

  • Xóa thủ công cần thêm bước để Git nhận thay đổi.
  • Nếu bạn quên stage việc xóa, Git vẫn nghĩ tệp tồn tại, dễ gây nhầm lẫn khi commit hoặc merge.
  • git rm gọn gàng và an toàn hơn khi bạn chủ đích xóa các tệp đã được theo dõi.

Khôi phục tệp đã xóa trong Git

Nếu bạn xóa tệp rồi mới nhận ra vẫn cần nó thì sao? Không vấn đề. Git cung cấp vài cách để khôi phục tùy vào thời điểm bạn phát hiện lỗi.

Nếu bạn chưa commit:

Giả sử bạn đã xóa tệp nhưng chưa commit thay đổi. Bạn có thể khôi phục từ lần commit gần nhất như sau: 

git restore file.txt

Lệnh này đưa tệp trở lại thư mục làm việc từ commit mới nhất.

Nếu bạn đã commit việc xóa:

Cũng ổn. Trước hết, tìm commit cuối cùng nơi tệp vẫn tồn tại:

git log -- file.txt

Xem log và sao chép hash commit nơi tệp vẫn còn. Sau đó chạy:

git checkout <commit hash> -- file.txt

Trong các phiên bản Git cũ, bạn có thể dùng lệnh trên. Lệnh này khôi phục tệp từ một commit cụ thể, nhưng cũng có thể chuyển nhánh.

Từ Git 2.23, lệnh này được tách thành hai lệnh rõ ràng hơn:

  • git switch (để chuyển nhánh)
  • git restore (để khôi phục tệp)

Nếu bạn chỉ muốn khôi phục một tệp từ một commit, dùng:

git restore --source=<commit-hash> --file.txt

Lệnh này lấy tệp từ commit đó và đặt lại vào thư mục làm việc của bạn.

Nếu bạn không chắc tệp bị xóa khi nào:

Có thể bạn đã thay đổi khá nhiều và không nhớ khi nào tệp biến mất. Khi đó, dùng git reflog hoặc reference log: 

git reflog

Lệnh này hiển thị lịch sử đầy đủ các commit, checkout, reset, và mọi thao tác của bạn trong Git.

Nhưng git reflog chỉ dùng cục bộ và không hoạt động trên kho từ xa. Nếu bạn làm việc với kho từ xa, tốt hơn là dùng git log -- file.txt để theo dõi lịch sử của tệp đó.

Khi đã tìm được thời điểm tệp còn tồn tại, khôi phục nó bằng git checkout hoặc git restore như trước.

Sửa tệp thiếu trong Git

Đôi khi tệp bị xóa trực tiếp từ hệ thống—có thể qua trình quản lý tệp, lệnh rm trong terminal, hoặc vô tình. Khi điều này xảy ra, Git không tự động dọn dẹp. Thay vào đó, nó đánh dấu các tệp đó là thiếu và chờ bạn xử lý việc xóa đúng cách.

Hãy xem cách xử lý tình huống này theo từng bước.

Bước 1: Kiểm tra tệp thiếu

Chạy lệnh này trong thư mục dự án:

git status

Check the file with the git status command.

Nếu Git báo tệp bị xóa, nghĩa là nó đã biến mất khỏi hệ thống của bạn, nhưng thay đổi chưa được stage.

Bước 2: Stage việc xóa 

Để báo cho Git stage mọi thay đổi (bao gồm tệp bị xóa), chạy:

git add -A
  • git add -A = stage mọi thay đổi (mới, sửa, xóa).
  • git add -u = stage tệp đã sửa + đã xóa, nhưng không bao gồm tệp mới.

Lệnh này stage mọi thay đổi tệp: mới, sửa, và xóa. Sau đó commit cập nhật:

git commit -m "Removed missing files"

Stage everything with the git add -A command.

Đây là cách an toàn nhất để dọn dẹp vì nó bao quát mọi thay đổi trong một lượt.

Bước 3: Push lên kho từ xa 

Nếu bạn làm việc với kho từ xa, hãy push commit:

git push origin <branch-name>

Thay <branch-name> bằng nhánh đang làm việc, như main hoặc dev.

Bước 4: Cách khác

Giả sử bạn đã xóa thủ công một loạt tệp, có thể do nhầm lẫn, hoặc khi dọn dẹp. Git vẫn nghĩ các tệp đó tồn tại cho đến khi bạn báo ngược lại.

Nếu bạn không muốn xóa từng tệp bằng git rm, có cách nhanh hơn để dọn dẹp.

Chạy lệnh này trong terminal:

git ls-files --deleted -z | xargs -0 git rm

Cụ thể:

  • git ls-files --deleted liệt kê tất cả tệp Git đang theo dõi nhưng giờ đã thiếu.
  • xargs -0 git rm truyền các tên tệp đó cho git rm và xóa chúng khỏi index của Git.

Điều này hữu ích khi bạn làm việc trên dự án lớn và muốn dọn nhanh.

Automatically remove all missing files.

Lưu ý: Tôi nhận thông báo này vì không có tệp nào đang được theo dõi bị thiếu trên đĩa của bạn.

Xóa tệp nâng cao trong Git

Sau khi đã nắm cơ bản, hãy xem các tình huống nâng cao hơn khi xóa tệp khỏi Git không chỉ đơn giản chạy git rm. Đây là các trường hợp có dữ liệu nhạy cảm hoặc cần dọn dẹp tệp chưa theo dõi một cách cẩn thận.

Gỡ dữ liệu nhạy cảm khỏi Git

Đôi khi một tệp chứa dữ liệu riêng tư, như khóa API hoặc mật khẩu, bị commit nhầm. Xóa thông thường sẽ không giúp được. Vì Git lưu toàn bộ lịch sử, và tệp vẫn tồn tại trong các commit trước.

Để xóa sạch hoàn toàn, bạn có thể dùng lệnh git filter-repo: git filter-repo (khuyến nghị)

Đây là lựa chọn mới và tốt hơn filter-branch. Nhanh hơn, an toàn hơn, và dễ dùng hơn.

Trước tiên, cài đặt (bạn cần Python và pip):

pip install git-filter-repo

Sau đó chạy:

git filter-repo --path hide.txt --invert-paths

Lệnh này xóa tệp hide.txt khỏi mọi commit trong lịch sử kho của bạn.

Để xác nhận, chạy:

git log --all -- supersecrets.txt

Nếu tệp đã biến mất, thêm nó vào .gitignore để không bị theo dõi lại:

echo hide.txt >> .gitignore

Nếu bạn làm việc theo nhóm, hãy dọn lịch sử đã viết lại và force-push thay đổi:

git push origin --force --all

Sau đó thông báo cho đồng đội. Họ sẽ cần re-clone hoặc reset bản sao cục bộ để tránh lỗi.

Dọn tệp chưa theo dõi với git clean

Tóm lại:

  • Các tệp đã theo dõi nằm trong lịch sử Git. Để xóa, dùng git rm, sau đó commit.
  • Các tệp chưa theo dõi không nằm trong Git. Chúng có thể tích tụ và làm rối dự án.

Để xóa tệp hoặc thư mục chưa theo dõi, dùng git clean.

Các tùy chọn hữu ích nhất:

git clean -n     # Show which untracked files will be removedgit clean -nd    # Show which untracked folders will be removedgit clean -fd    # Delete all untracked files and folders. It is destructive.

Use the git clean command to delete and untrack the files

Cụ thể:

  • -n nghĩa là chỉ xem trước.
  • -f nghĩa là xóa cưỡng bức.
  • -d bao gồm thư mục trong quá trình dọn dẹp.

Lưu ý: git clean sẽ không động đến tệp đã theo dõi. Nhưng nó sẽ xóa mọi thứ chưa theo dõi, kể cả tệp bạn muốn giữ. Vì vậy, luôn dùng -n trước để xem nó sẽ xóa gì.

Xóa tệp trong GitHub & công cụ GUI

Hầu hết những gì ta đã đề cập đến nay dùng dòng lệnh. Nhưng không phải ai cũng làm vậy và điều đó hoàn toàn ổn. Một số lập trình viên dùng công cụ trực quan khi làm việc trực tiếp trên GitHub.

Vì vậy, hãy xem cách xóa tệp hoạt động trên giao diện web của GitHub và các công cụ GUI khác, và so sánh với dòng lệnh.

Xóa tệp trên trang web GitHub

Nếu bạn làm việc trong giao diện trình duyệt của GitHub, bạn có thể xóa tệp mà không cần terminal.

Cách thực hiện trên giao diện năm 2025:

  1. Mở tệp bạn muốn xóa.
  2. Nhấp vào biểu tượng ba chấm ở góc trên bên phải.
  3. Chọn Delete file trong menu thả xuống.

Deleting the file in the GitHub web interface

GitHub sau đó sẽ hiển thị ô thông điệp commit. Thêm một thông điệp ngắn như:

Delete practice.py

Bạn cũng có thể viết mô tả tùy chọn.

Tiếp theo, chọn cách lưu thay đổi:

  • Commit trực tiếp lên nhánh main
  • Hoặc tạo một nhánh mới và mở pull request (khuyến nghị cho quy trình làm việc nhóm)

Nhấp Commit changes, và GitHub sẽ xóa tệp và lưu việc xóa như một commit, tương tự như git rm trên dòng lệnh.

Xóa tệp bằng công cụ Git GUI

Nếu bạn dùng Git GUI như GitHub Desktop, Sourcetree hoặc Tower, quy trình cũng đơn giản:

  1. Xóa tệp trong trình quản lý tệp hoặc ngay trong ứng dụng.
  2. Ứng dụng sẽ hiển thị việc xóa dưới mục “Changes” hoặc “File Status”.
  3. Xem lại, stage và commit thay đổi.

Mỗi công cụ trông hơi khác nhau, nhưng quy trình tương tự: Bạn theo dõi thay đổi trực quan và commit khi sẵn sàng.

Thực hành tốt nhất theo nền tảng

Sau đây là cái nhìn nhanh về cách xóa tệp hoạt động trên các nền tảng khác nhau, và khi nào mỗi nền tảng hữu ích nhất:

  • GitHub (Web): Phù hợp cho các sửa lỗi nhanh và cập nhật nhỏ. Tránh dùng cho dọn dẹp lớn hoặc tệp nhạy cảm. 
  • Công cụ Git GUI: Tuyệt vời cho công việc hằng ngày. Dễ xem thay đổi và commit an toàn. 
  • Dòng lệnh: Linh hoạt và hữu dụng nhất. Tốt nhất cho tác vụ nâng cao như chỉnh sửa hàng loạt hoặc thay đổi lịch sử. 

Thực hành tốt nhất khi xóa tệp trong Git

Xóa tệp trong Git có vẻ đơn giản, nhưng một bước sai có thể làm hỏng mã của bạn. Dưới đây là vài mẹo thực tế tôi dùng để đảm bảo xóa an toàn và có kiểm soát, đặc biệt với dự án dùng chung hoặc dài hạn.

Luôn xác minh trước khi xóa

Trước khi xóa tệp, dành chút thời gian xác nhận vai trò của nó:

  • Chạy git status để xem nó đã được stage hay sửa đổi chưa.
  • Dùng git log -- <filename> để xem lịch sử commit của tệp.

Bước kiểm tra nhanh này giúp tôi tiết kiệm hàng giờ khôi phục sau này.

Dùng commit nguyên tử

Commit nguyên tử nghĩa là một commit cho mỗi thay đổi logic.

Ví dụ, nếu tôi đang xóa các tệp không dùng, tôi chỉ commit những việc xóa đó, tách biệt với chỉnh sửa mã.

Lý do vì sao hữu ích:

  • Dễ debug hơn. Công cụ như git bisect hoạt động tốt hơn khi commit nhỏ và tập trung.
  • Lịch sử commit rõ ràng, sạch sẽ.
  • Code review nhanh hơn.

Hợp tác cẩn thận khi viết lại lịch sử

Việc viết lại lịch sử bằng công cụ như git filter-repo ảnh hưởng đến mọi người trong nhóm. Để tránh hỗn loạn:

  • Trao đổi trước khi viết lại các nhánh dùng chung.
  • Cẩn thận khi dùng git push --force vì nó viết lại lịch sử từ xa.
  • Báo đồng đội re-clone hoặc reset kho cục bộ sau đó.

Dùng --dry-run trước lệnh phá hủy

Trước khi chạy lệnh xóa tệp, luôn thử trước:

git clean -n

Lệnh này hiển thị những gì sẽ bị xóa mà không xóa gì cả. Lý do tôi nghĩ bạn luôn nên làm vậy: 

  • Tránh xóa nhầm tệp bạn muốn giữ.
  • Là tấm lưới an toàn, đặc biệt trong dự án lớn nơi một sai sót có thể xóa sạch log hoặc tệp sinh ra.

Kết hợp git rm --cached với .gitignore

Nếu bạn lỡ commit thứ không nên có trong kho (như tệp cấu hình hoặc log), hãy sửa trong hai bước:

  1. Ngừng theo dõi tệp:```git rm --cached <filename>
git rm --cached <filename>

Lệnh này báo Git ngừng theo dõi tệp nhưng giữ nó trên máy của bạn.

  1. Thêm nó vào .gitignore:
echo <filename> >> .gitignore

Vì sao hữu ích:

  • Giữ tệp nhạy cảm hoặc cục bộ (như .env, .log, hoặc node_modules) ngoài kho.
  • Tránh rác trong lịch sử Git.
  • Các chỉnh sửa tương lai với những tệp đó sẽ không kích hoạt thay đổi trong Git.

Các trường hợp biên với Git: Staging & thư mục trống

Đôi khi việc xóa tệp không như mong đợi. Bạn có thể stage nhầm tệp hoặc gặp vấn đề với thư mục trống. 

Đây là cách tôi xử lý các trường hợp thường gặp.

Bỏ stage một tệp mà không mất thay đổi

Giả sử tôi chạy git add . và vô tình stage một tệp không định stage. Tôi không muốn mất thay đổi—tôi chỉ muốn bỏ stage nó.

Để sửa, tôi chạy:

git reset HEAD <filename>

Lệnh này bỏ stage tệp nhưng giữ nguyên các chỉnh sửa.

Để xác nhận, tôi dùng:

git status

Giờ tệp sẽ hiển thị là "modified" thay vì "staged."

Giữ thư mục trống trong kho

Mặc định, Git bỏ qua thư mục trống. Nếu tôi cố commit một thư mục không có tệp bên trong, Git sẽ bỏ qua.

Nhưng đôi khi tôi muốn giữ thư mục đó trong kho cho log hoặc tải lên sau này. Cách phổ biến là thêm tệp giữ chỗ tên .gitkeep.

Cách làm:

touch logs/.gitkeepgit add logs/.gitkeepgit commit -m "Keep logs folder in the repo"

Điều này khiến thư mục không còn “trống”, nên Git sẽ theo dõi nó.

Lưu ý: .gitkeep không phải tính năng sẵn có của Git. Nó chỉ là quy ước. Bạn có thể đặt tên khác, nhưng .gitkeep giúp người khác hiểu mục đích.

Khắc phục sự cố khi xóa tệp trong Git

Dưới đây là vài vấn đề phổ biến tôi từng gặp khi xóa tệp trong Git và cách khắc phục.

Tệp vẫn xuất hiện trên kho từ xa

Bạn đã xóa tệp, commit thay đổi, nhưng nó vẫn còn trên kho từ xa. Có thể bạn quên push.

Vì vậy hãy nhớ chạy:

git push origin <branch-name>

Ngoài ra kiểm tra:

  • Bạn có đang ở đúng nhánh không?
  • Commit của bạn có thực sự bao gồm việc xóa tệp không?

Vấn đề với submodule

Submodule là các kho Git bên trong những kho Git khác. Chúng không hoạt động như thư mục bình thường.

Nếu bạn xóa tệp bên trong submodule:

  • Đi vào thư mục submodule
  • Commit và push các thay đổi từ chính submodule đó

Nếu bạn gỡ hoàn toàn submodule:

  • Xóa thư mục submodule
  • Gỡ mọi tham chiếu trong .gitmodules và .git/config

Trạng thái HEAD tách rời (Detached HEAD)

Trong Git, HEAD thường trỏ đến nhánh hiện tại. Nhưng đôi khi nó trỏ đến một commit cụ thể, gọi là detached HEAD.

Điều này xảy ra nếu bạn:

  • Checkout một commit bằng hash
  • Chuyển sang một tag
  • Checkout một nhánh từ xa mà không thiết lập tracking

Kiểm tra trạng thái:

git status

Nếu bạn thấy:

HEAD detached at <commit-hash>

Bạn không ở trên một nhánh, và mọi thay đổi mới có thể mất khi bạn chuyển đi.

HEAD Detached in removing the file in git

Cách khắc phục: 

Nếu bạn đã có thay đổi và muốn giữ lại, chạy:

git checkout -b <new-branch-name>

Lệnh này đặt công việc của bạn lên một nhánh mới và lưu lại.

HEAD Reattached in git

Nếu bạn đã commit thay đổi và muốn chuyển chúng sang nhánh khác sau, làm như sau:

git checkout -b temp-branch          # from detached HEADgit checkout main                    # or another target branchgit merge temp-branch

Nếu bạn không tạo thay đổi nào và chỉ muốn thoát khỏi detached HEAD, chạy:

git checkout <branch-name> 

Xong. HEAD của bạn đã được gắn lại, mọi thứ trở về bình thường.

Lỗi quyền hoặc trạng thái

Đôi khi Git không thể xóa tệp, thường gặp trên Windows. Điều này xảy ra nếu:

  • Tệp đang được mở bởi chương trình khác
  • Git không có quyền cập nhật tệp

Cách khắc phục:

  • Đóng mọi ứng dụng đang dùng tệp
  • Khởi động lại terminal với quyền Administrator (trên Windows)

Vấn đề khi merge hoặc rebase

Nếu thấy lỗi như:

  • you are not currently on a branch
  • merge conflict

Có thể bạn đang ở giữa quá trình merge hoặc rebase.

Để hoàn tất rebase sau khi giải quyết xung đột:

git rebase --continue

Để hủy toàn bộ rebase hoặc merge:

git reset --merge

Lệnh này khôi phục kho về trạng thái trước khi bắt đầu merge.

Muốn loại bỏ mọi thay đổi cục bộ và reset thư mục làm việc? 

Hãy thử:

git restore .

Lệnh này đưa tất cả tệp về trạng thái đã commit gần nhất.

Lời kết 

Khi xóa tệp trong Git, rất dễ mắc lỗi nếu bạn không chú ý. Một sai sót nhỏ có thể dẫn đến vấn đề lớn hơn: mã hỏng, mất việc, hoặc gây rối trong nhóm. Vì vậy, hãy dành một chút để kiểm tra kỹ những gì bạn đang làm.

Dùng đúng lệnh cho đúng tình huống. Nếu chưa chắc lệnh sẽ làm gì, hãy thử dry run trước. Và nếu bạn làm việc nhóm, đảm bảo mọi người hiểu và thống nhất.

Git còn làm được nhiều điều hơn là xóa tệp. Bạn có thể xóa nhánh,  hoàn tác lỗi bằng reset và revert, hoặc xem chính xác những gì đã thay đổi với git diff. Càng học, quy trình làm việc của bạn càng mượt.

Hãy tiến từng bước. Đó là cách để bạn thành thạo.

Git Remove File FAQs

“Staging the removal” nghĩa là gì?

Staging nghĩa là chuẩn bị thay đổi cho lần commit tiếp theo. Khi bạn chạy git rm filename, Git xóa tệp khỏi thư mục và chuẩn bị việc xóa đó để được lưu trong commit kế tiếp. Đây gọi là staging việc xóa. Thay đổi chưa trở thành vĩnh viễn cho đến khi bạn chạy git commit.

Sự khác nhau giữa git rm và rm là gì?

rm chỉ xóa tệp khỏi thư mục cục bộ của bạn. Git sẽ không theo dõi thay đổi này cho đến khi bạn chỉ định. 

git rm xóa tệp và stage việc xóa cho lần commit tiếp theo, vì vậy Git cũng xóa nó khỏi kho.

Khi nào nên dùng git push origin so với git push?

Khi nào dùng mỗi lệnh:

  • Dùng git push nếu nhánh của bạn đã kết nối với remote. 
  • Dùng git push origin khi bạn muốn chỉ rõ remote sẽ push đến, như khi push một nhánh mới hoặc có nhiều remote.
git pull làm gì?

git pull cập nhật nhánh cục bộ của bạn với những thay đổi mới nhất từ remote. Nó fetch các commit mới từ remote rồi merge chúng vào nhánh hiện tại của bạn.

Laiba Siddiqui

Tác giả

Laiba Siddiqui

Tôi là một chiến lược gia nội dung, yêu thích việc đơn giản hóa các chủ đề phức tạp. Tôi đã giúp các công ty như Splunk, Hackernoon và Tiiny Host tạo nội dung hấp dẫn và giàu thông tin cho khán giả của họ.

Chủ đề

Liên quan