2012-03-02 11 views
15

Làm cách nào để dễ dàng xóa nhiều tệp mà không cần nhập đường dẫn đầy đủ của tất cả các tệp đó vào git rm? Tôi có rất nhiều tập tin sửa đổi tôi muốn giữ để loại bỏ tất cả các sửa đổi là không thể hoặc.Git rm một số tệp?

Và cũng có thể hoàn nguyên các thay đổi của một số tệp mà không cần nhập thủ công git checkout -- /path/to/file?

Trả lời

20

Bạn có thể cung cấp ký tự đại diện cho git rm.

ví dụ:

git rm *.c 

Hoặc bạn chỉ có thể viết ra tên của tất cả các tập tin trong tập tin khác, nói filesToRemove.txt:

path/to/file.c 
path/to/another/file2.c 
path/to/some/other/file3.c 

Bạn có thể tự động hoá này:

mở file và xem xét các tên (để chắc chắn rằng nó không sao).

Sau đó:

cat filesToRemove.txt | xargs git rm 

Hoặc:

for i in `cat filesToRemove.txt`; do git rm $i; done 

Kiểm tra manpage cho xargs cho các tùy chọn nhiều hơn (đặc biệt là nếu nó quá nhiều tập tin.).

+0

Anh ấy đang sử dụng Windows và sử dụng trình bao của Windows. – jmlane

+0

Đó là cách quá phức tạp cho một cái gì đó sẽ mất khoảng 3 giây. – Tower

+0

Về cơ bản nó là "git rm ..." và bằng cách nào đó bạn phải chuyển tất cả các tên tệp. Ngắn git đọc tâm trí của bạn, đây là cách nhanh nhất. – Manish

1

Trên hệ thống POSIX, bạn có thể tạo hình cầu vỏ phù hợp với tất cả các tệp mong muốn, bạn có thể chỉ cần chuyển số đó đến git rmgit checkout --. Trên Windows, cmd.exe và PowerShell không bao gồm globbing và trang trại mà ra các ứng dụng (git không làm điều đó cho các tập tin, từ những gì tôi đã đọc). Bạn sẽ cần phải sử dụng một lệnh hoặc tập lệnh Windows để chuẩn bị một danh sách tập tin và đặt nó vào các lệnh git của bạn một cách thích hợp để có được một hiệu ứng tương tự.

Bất kỳ chiến lược nào bạn sử dụng để chuyển danh sách tệp vào lệnh trình bao sẽ hoạt động đối với lệnh git chấp nhận đường dẫn tệp.

+0

Um, bạn có thể cho tôi xem ví dụ, tôi đang sử dụng Windows không? – Tower

+0

Ồ, cmd.exe của Windows và PowerShell không làm globbing và git cho Windows không bao gồm chức năng này theo như tôi biết vì nó sẽ phá vỡ cây/nhánh/cam kết globbing (hoặc vì vậy tôi đã đọc). Bạn sẽ phải khám phá các phương thức shell của Windows để phù hợp với đường dẫn tệp. – jmlane

9

Chỉ cần xóa chúng bằng bất kỳ phương thức nào khác (Explorer, bất kỳ thứ gì), sau đó chạy git add -A. Để hoàn nguyên một số tệp, bạn cũng có thể kiểm tra thư mục.

+1

Phương pháp dễ nhất trên trang này. – Jon

+0

tôi đến đây tìm kiếm một cách dễ dàng hơn so với người khám phá. nếu tôi có thể tìm thấy tất cả các tập tin tôi muốn loại bỏ bằng cách sử dụng tìm kiếm đệ quy trong bash tôi muốn không phải làm điều này trong thám hiểm và quay trở lại git bash để hoàn thành nó. một cái gì đó như thế này _almost_ hoạt động tìm. -name "* debug *" -exec bash -c 'file = {}; git rm $ file '\; chỉ sử dụng đường dẫn tương đối –

0

Bạn cũng có thể xem Cygwin, vì nó cung cấp nhiều chức năng BSD Unix/Linux/* trên Windows. Cygwin bao gồm một vỏ Bash và tìm thấy (1), trong số các công cụ khác được đề cập ở trên. (Tôi thường có 2-4 nhà ga Cygwin mintty lên cùng một lúc trên Windows 7 bởi vì tôi tìm Cygwin mà tiện dụng.)

1

Đối với loại bỏ nhiều file cùng một lúc, bạn có thể muốn kiểm tra các câu trả lời here

Bạn có thể xóa các tập tin mà bạn không muốn và chạy lệnh này: git rm $(git ls-files --deleted)

0

bạn chỉ có thể sử dụng:

git add -u 
+2

Vui lòng thêm các chi tiết khác vào câu trả lời của bạn. – Jayan

0

tôi thấy git rm 's xử lý thẻ hoang dã gây phiền nhiễu. Tìm có thể thực hiện thủ thuật theo một dòng: find . -name '*.c' -exec git rm {} \; {} là nơi tên tệp sẽ được thay thế.Những điều tuyệt vời về find là nó có thể lọc trên rất nhiều loại tập tin thuộc tính không chỉ tên.

0

Trên Windows 10, sử dụng Git Bash, từ vị trí .gitignore trong cấu trúc tệp của bạn.

git rm -r --cached some_directory/ 

Tôi vừa sử dụng tính năng này để bỏ qua toàn bộ thư mục, đệ quy. Đây là nội dung trong tệp .gitignore của tôi cho điều này:

# Use .gitignore to ignore a directory and its contents # 
/some_directory/