Có thể `git status` chỉ sửa đổi các tập tin?


173

Có thể git statusvà chỉ hiển thị các tập tin sửa đổi?

Vấn đề là tôi có quá nhiều tập tin được dàn dựng mà tôi không muốn cam kết hoặc gitignore vào lúc này và tôi không thể cuộn lên. Tôi có giới hạn cuộn lại được đặt trên Ubuntu.


1
Làm thế nào để bạn có một giới hạn cuộn? Theo mặc định, git statussẽ gọi máy nhắn tin.
Lily Ballard

Xin lỗi, giới hạn cuộn lại được đặt thành 512 dòng trên máy của tôi. Tôi đoán tôi có thể thay đổi nó; nhưng sẽ thích một lệnh một dòng để chỉ xem các tệp đã sửa đổi trong trạng thái vì GD / fantecache sẽ tạo ra nhiều tệp hơn nữa.
chrisjlee

1
Phải ... quan điểm của tôi là máy nhắn tin không sử dụng cuộn ngược của thiết bị đầu cuối của bạn.
Lily Ballard

Bất cứ điều gì sai chỉ với grepping cho bất cứ điều gì bạn thấy thú vị? Sử dụng --shorthoặc --porcelainđể có được các phiên bản một dòng của trạng thái.

2
Một điểm nữa, dựa trên gợi ý sử dụng git ls-files -m: bạn quan tâm đến (những) sửa đổi nào, dàn dựng, không dàn dựng, hoặc cả hai?

Câu trả lời:


268

Bạn không thể làm điều này với git status, nhưng bạn có thể sử dụng git ls-files -mđể hiển thị tất cả các tệp đã sửa đổi.


6
Chỉ để những người khác biết, điều này sẽ chỉ hiển thị các tệp đã được sửa đổi mà chưa được dàn dựng.
Gerry

11
Trong khi đây là câu trả lời được chấp nhận, nó có thông tin không chính xác. Bạn chỉ có thể "'git status' các tệp đã sửa đổi" git status | grep modifiedgiống như user23186 chỉ ra trong câu trả lời của họ.
K. Alan Bates

9
Đối với tôi, git ls-files -mkhông hiển thị bất cứ điều gì nhưng git status | grep modifiedđang làm việc.
Sandeepan Nath

1
Như những người khác đã chỉ ra, điều này chỉ hiển thị các tập tin chưa được phân loại. Nếu bạn muốn hiển thị cả các tập tin chưa được dàn dựng và dàn dựng, đây là câu trả lời hay nhất tôi từng thấy: stackoverflow.com/a/39994894/452587
thdoan

1
@thdoan Có một số tùy chọn để hiển thị các tệp được phân loại, mặc dù câu hỏi cụ thể này dường như muốn loại trừ rõ ràng các tệp được phân loại. git diff --name-only --diff-filter=M HEADsẽ chỉ hiển thị các tệp đã sửa đổi cho cả hai giai đoạn và không được dàn dựng, mặc dù vậy bạn nên kiểm tra các tài liệu trên --diff-filterđể xem những loại bộ lọc nào bạn có thể muốn thêm.
Lily Ballard

57

Dường như git status -unosẽ chỉ cho bạn thấy các tệp mà git đang theo dõi, mà không hiển thị bất cứ thứ gì khác trong thư mục. Không chính xác những gì bạn yêu cầu, nhưng có lẽ hoàn thành điều tương tự (nhận danh sách các tệp có độ dài có thể đọc được).


1
git status -u nokhông hiển thị (1) tệp được theo dõi đã được sửa đổi, cũng không (2) tệp được theo dõi được dàn dựng. Tôi đã xác minh điều này với các phiên bản git 1.8.5.2 và 1.9.4.
mxxk

2
@TomNysetvold, bạn có thể thực sự có ý nghĩa git status -uno( stackoverflow.com/questions/7008546/... )
mxxk


29

Đối với các tệp sửa đổi:

git status | grep modified:

1
Rất hữu ích Tôi đã tạo một bí danh cho việc này:git config --global alias.modified '!git status | grep modified:'
Richard Parnaby-King

15

git diff --name-only --diff-filter=M


2
Tôi khuyên dùng các bộ lọc git diff --cached --name-only --diff-filter=ACMRđó : các tệp đã thêm, sao chép, sửa đổi và đổi tên.
qwertzguy


3

Tôi đã tìm kiếm thông tin tương tự và tìm thấy sau đây cung cấp các tệp sửa đổi:

git status -uno

2
git status -uno --porcelainthêm đầu ra đẹp cho phân tích cú pháp kịch bản
pprzemek

3

Bạn có thể dùng

$ git status -uno 

chỉ liệt kê các tập tin sửa đổi.


3

Vấn đề là tôi có quá nhiều tập tin được dàn dựng mà tôi không muốn cam kết hoặc gitignore vào lúc này và tôi không thể cuộn lên.

Mặc dù điều này có thể không trả lời trực tiếp câu hỏi chỉ liệt kê các tệp đã sửa đổi, nhưng nó có thể giúp giới hạn số lượng tệp được liệt kê.

Bạn có thể chuyển một đường dẫn để git statusgiới hạn đầu ra vào một thư mục cụ thể trong repo.

Ví dụ:

git status app
git status spec
git status src/components

2

Để liệt kê các tập tin sửa đổi, sử dụng:

git ls-files -m

Nếu bạn chỉ muốn tên cơ sở (không có đường dẫn) thì bạn có thể chuyển từng kết quả sang lệnh tên cơ sở bằng xargs, theo từng dòng:

git ls-files -m | xargs -L 1 basename

1

Tôi sử dụng lệnh này:

$ git status -uno -sb

Và đầu ra trông như thế này:

## master...origin/master
 M GNUmakefile
 M include/mp4v2/project.h

0

Tôi sử dụng git cola. Đây là một ứng dụng khách UI đơn giản và thanh lịch sẽ hiển thị cho bạn các tệp đã sửa đổi và cung cấp cho bạn một ảnh khác biệt như những thay đổi bạn đã thực hiện.

git colacung cấp cho bạn một GUI nơi bạn có thể hình dung những tệp nào bạn đã sửa đổi, mà bạn đã dàn dựng và thậm chí cả những tệp bạn không theo dõi. Câu hỏi của bạn là chỉ sử dụng trạng thái git mà tôi tin, nhưng tôi nghĩ git cola có thể giúp ích khi điều đó và những thứ khác nữa. Kiểm tra trang web này từ nhiều thông tin hơn: git-cola.github.com/sc Greensshots.html


1
Bạn có thể cung cấp làm thế nào liên quan đến câu trả lời của tôi cho tôi không quen thuộc với git cola này. ví dụ: ảnh chụp màn hình, hoặc chi tiết hơn?
chrisjlee

đó là lý do tại sao bị hạ cấp? :) Dù sao đi nữa, git cola cung cấp cho bạn một GUI nơi bạn có thể hình dung những tập tin bạn đã sửa đổi, bạn đã dàn dựng và thậm chí cả những tập tin bạn không theo dõi. Câu hỏi của bạn là chỉ sử dụng trạng thái git mà tôi tin, nhưng tôi nghĩ git cola có thể giúp ích khi điều đó và những thứ khác nữa. Kiểm tra trang web này từ nhiều thông tin hơn: git-cola.github.com/sc Greensshots.html
n_x_l

Làm cách nào để thay đổi ngôn ngữ giao diện của cola?
ziyuang

0

Nếu bạn muốn liệt kê các tập tin sửa đổi, bạn có thể làm điều này:

git log -n1 --oneline --name-status | grep '^M'


0

Để liệt kê tất cả các tệp sửa đổi, sử dụng:

git show --stat --oneline HEAD

0

Tất cả các câu trả lời tuyệt vời; chỉ FEI, "git checkout" (chuyển sang hoặc trong cùng một nhánh) xuất hiện để chỉ hiển thị các tệp đã sửa đổi.


0

HĐH: cửa sổ

Lệnh sau sẽ hiển thị tất cả các dòng chứa "đã sửa đổi:" , "đã đổi tên:" hoặc "tệp mới:"

git status | findstr "modified: renamed: new file:"

Nếu bạn muốn chỉ định loại tệp: (ví dụ *.py *.ini)

git status *.py *.ini | findstr "modified: renamed: new file:"

Nếu bạn nghĩ rằng quá nhiều rắc rối khi gõ quá nhiều:

  1. tạo một tệp bó (ví dụ st.bat:)

  2. viết nội dung như sau:

    @echo off
    :: st.bat  (this line doesn't necessarily. ( just let you know the scripts name.))
    git status %~1 | findstr "modified: renamed: new file:"
    
  3. thêm đường dẫn môi trường chứa tệp bó của bạn. ( st.bat)

  4. sử dụng

    st.bat "*.py *.ini"
    

    (lưu ý: nếu loại> 1 thì phải thêm dấu chấm phẩy)

HĐH: LINUX

như @Lance nói bạn có thể thử

git status | grep modified:

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.