Tại sao sử dụng 'git rm' để xóa tệp thay vì 'rm'?


171

Trên SVN, việc loại bỏ một cái gì đó khỏi hệ thống tập tin trực tiếp (thay vì sử dụng svn) đã tạo ra vô số vấn đề đau đầu.

Tôi chưa thấy đây là một vấn đề khi sử dụng git, nhưng tôi nhận thấy rằng git có rmtriển khai riêng ( git rm).

Sự khác biệt giữa rmvà là git rmgì?

Câu trả lời:


253

Nếu bạn chỉ sử dụng rm, bạn sẽ cần phải theo dõi nó với git add <fileRemoved>. git rmlàm điều này trong một bước.

Bạn cũng có thể sử dụng git rm --cachedtệp sẽ xóa tệp khỏi chỉ mục (sắp xếp tệp để xóa trong lần xác nhận tiếp theo), nhưng giữ bản sao của bạn trong hệ thống tệp cục bộ.


Câu trả lời tốt. Tôi đã có thể sử dụng git reset --hardvà sau đó thực hiện kiểm tra tổng thể để thoát khỏi trạng thái đầu tách ra vì tôi biết tôi không có bất kỳ thay đổi nào không được cam kết. Nếu bạn chưa thực hiện các thay đổi của mình, bạn có thể muốn thực hiện git stash, nhưng tôi tương đối mới với git vì vậy tôi không biết lệnh chính xác. Nếu bạn đã đến đây vào hoặc sau năm 2014, tôi hy vọng câu trả lời này hữu ích cho bạn.
Eric Hepperle - CodeSlayer2010

@Andy - Nếu tôi đã sử dụng rm(thay vì git rm) và xóa nhiều tệp bằng cách sử dụng và bây giờ không muốn gittheo dõi những tệp đó. Có cách nào để hoàn nguyên các thay đổi? Tôi muốn gitbước đi rmnhư bị loại bỏ vì tôi đã không sử dụng git rmở nơi đầu tiên.
Chetan Arvind Patil

Sẽ thật tuyệt nếu điều này được phát âm rõ ràng trong các tài liệu trực tuyến (nó có thể ở đó, nhưng rõ ràng là không rõ ràng hoặc câu hỏi này sẽ không được hỏi). Sẽ thật tốt cho người dùng khi biết rằng họ sẽ không làm gì sai nếu họ đi theo lộ trình rm OS. Và có những lý do để đi theo con đường HĐH. Vd để lấy (tôi tin).
bob

12

Xóa các tệp bằng cách sử dụng rmkhông phải là một vấn đề, nhưng nếu sau đó bạn muốn cam kết rằng tệp đã bị xóa, bạn sẽ phải thực hiện một cách git rmnào đó, vì vậy bạn cũng có thể thực hiện theo cách đó ngay lập tức.

Ngoài ra, tùy thuộc vào trình bao của bạn, thực hiện git rmsau khi xóa tệp, bạn sẽ không hoàn thành tab, do đó bạn sẽ phải tự đánh vần đường dẫn, trong khi nếu bạn git rmvẫn tồn tại tệp, việc hoàn tất tab sẽ hoạt động như bình thường.


7

git rmsẽ xóa tệp khỏi chỉ mục và thư mục làm việc (chỉ mục nếu bạn đã sử dụng --cached) để xóa được thực hiện cho lần xác nhận tiếp theo.


4

Tuy nhiên, nếu bạn kết thúc bằng rm thay vì git rm. Bạn có thể bỏ qua phần bổ sung git và trực tiếp thực hiện các thay đổi bằng cách sử dụng:

git commit -a


3

Xóa các tệp khỏi chỉ mục hoặc từ cây làm việc và chỉ mục. git rm sẽ không xóa một tập tin khỏi thư mục làm việc của bạn.

Đây là cách bạn có thể xóa một tệp bằng cách sử dụng rm -fvà sau đó xóa nó khỏi chỉ mục của bạn vớigit rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

Tuy nhiên, bạn có thể làm tất cả trong một lần chỉ với git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html

2

Khi sử dụng git rm, việc xóa sẽ là một phần của cam kết tiếp theo của bạn. Vì vậy, nếu bạn muốn thúc đẩy sự thay đổi, bạn nên sử dụng git rm


2

Thêm vào câu trả lời của Andy, có thêm tiện ích để git rm:

  1. An toàn : Khi thực hiện git rmthay vì rm, Git sẽ chặn việc xóa nếu có sự khác biệt giữa HEADphiên bản của tệp và chỉ mục dàn hoặc phiên bản cây làm việc. Khối này là một cơ chế an toàn để ngăn chặn loại bỏ các thay đổi đang diễn ra.

  2. Bảo vệ : git rm --dry-run. Tùy chọn này là một biện pháp bảo vệ sẽ thực thi git rmlệnh nhưng không thực sự xóa các tệp. Thay vào đó, nó sẽ xuất ra những tập tin mà nó sẽ loại bỏ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.