2011-09-15 34 views
92

Trên SVN, loại bỏ thứ gì đó khỏi hệ thống tập tin trực tiếp (thay vì sử dụng svn) đã tạo ra một loạt các cơn đau đầu. Cho đến nay, bằng cách sử dụng git, tôi đã không tìm thấy điều này là một vấn đề, nhưng tôi nhận thấy rằng git có thực hiện rm riêng của nó.Tại sao nên sử dụng 'git rm' để xóa tệp thay vì 'rm'?

Có sự khác biệt nào không? Tôi có làm điều gì sai?

Trả lời

137

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 rm thực hiện việc này trong một bước.

Bạn cũng có thể sử dụng git rm --cached để xóa tệp khỏi chỉ mục (dàn dựng nó để xóa trên cam kết tiếp theo), nhưng giữ bản sao của bạn trong hệ thống tệp cục bộ.

+0

Câu trả lời hay. Tôi đã có thể sử dụng 'git reset --hard' và sau đó thực hiện thanh toán của chủ để thoát khỏi trạng thái đầu bị tách rời bởi 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 không cam kết thay đổi của bạn, bạn có thể muốn làm một stit git, nhưng tôi là tương đối mớ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. –

+0

@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 nó, và bây giờ không muốn 'git' theo dõi chúng. Có cách nào để hoàn nguyên thay đổi không? Tôi muốn 'git' để tread' rm' của tôi như bị xóa vì tôi không sử dụng 'git rm' ngay từ đầu. –

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 đẩy thay đổi, bạn nên sử dụng git rm

5

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

Ngoài ra, tùy thuộc vào vỏ của bạn, thực hiện git rm sau khi đã xóa tệp, bạn sẽ không nhận được tab hoàn thành, do đó bạn sẽ phải tự viết chính đường dẫn, trong khi nếu bạn vẫn còn tồn tại, hãy hoàn tất tab sẽ hoạt động như bình thường.

3

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

1

Xóa tệp khỏi chỉ mục hoặc từ cây đang hoạt động và chỉ mục. git rm sẽ không xóa một tệp 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 tin sử dụng rm -f và sau đó loại bỏ khỏi chỉ mục của bạn với git 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ả điều này trong một đi 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

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

git commit -a

Các vấn đề liên quan