Cara membuat status git hanya menampilkan file bertahap

86

Saya hanya ingin mendapatkan daftar nama file yang dipentaskan. Saya tidak dapat menemukan bendera yang setara --name-onlyuntuk git statusperintah tersebut. Apa alternatif yang baik?

Daftar file akan dialihkan ke php -l(pemeriksa sintaks lint PHP).

Solusi: perintah lengkap

git diff --name-only --cached | xargs -l php -l
Ward Bekker
sumber
3
Jika Anda menjalankan perintah itu secara manual, sepertinya Anda ingin memasukkannya ke hook pra-komit. kernel.org/pub/software/scm/git/docs/githooks.html
MatrixFrog

Jawaban:

130

Gunakan git diff --name-only(dengan --cacheduntuk mendapatkan file bertahap)

Ben Jackson
sumber
14

Jawaban yang diterima tidak akan memberi tahu Anda jenis perubahan apa yang ada di sana.

Ya, Jika Anda bukan pemeriksa sintaks tetapi orang biasa dengan repositori yang penuh dengan file tidak bertahap, dan Anda masih ingin tahu apa yang akan terjadi pada file bertahap - ada perintah lain:

git status --short | grep '^[MARCD]'

yang mengarah ke sesuatu seperti:

M  dir/modified_file
A  dir/new_file
R  dir/renamed -> dir/renamed_to
C  dir/copied_file
D  dir/deleted_file

Jelas, file ini dipentaskan, dan setelah git commit:
deleted_fileakan dihapus,
new_fileakan ditambahkan,
renamed_fileakan menjadi renamed_to.

Berikut penjelasan output format pendek: https://git-scm.com/docs/git-status#_short_format

coffman21
sumber
1. dalam versi saya (2.25.0.windows.1) ada spasi sebelum "M" dan "D". 2. Ada juga negara bagian lain - "??" yang saya tidak yakin bagaimana menafsirkannya.
itsho
@itsho spasi menunjukkan bahwa itu tidak dipentaskan. Jawaban ini benar karena cocok dengan karakter pertama di baris. Jika karakter pertama disetel maka itu adalah file bertahap. Jika itu adalah spasi, itu diabaikan.
Avner
1
Ini jenius! - harus ada bendera git untuk hal serupa
Norfeldt
4

Terinspirasi oleh jawaban @ coffman21 , saya telah menyiapkan alias berikut di saya.zshrc

alias gst="git status"
alias gst-staged="git status --short | grep '^\w.'"
alias gst-unstaged="git status  --short | grep '^\W.'"
alias gst-unstaged-tracked="git status  --short | grep '^\s.'"
alias gst-untracked="git status --short | grep '^??'"

Mungkin berguna bagi orang lain. Jadi menambahkannya ke tumpukan jawaban.

Norfeldt
sumber
1
untuk mewarnai konsisten Anda dapat menambahkan .di grep, untuk warna kedua 2 chars awal, seperti: grep '^\w.', grep '^\W.',grep '^\s.'
geekley
tidak perlu yang terakhir; itu sudah memiliki dua karakter??
geekley
Itu sekarang telah diperbaiki. Sekali lagi terima kasih
Norfeldt
0

untuk melihat file bertahap dengan perubahan kode

git diff --staged   

atau menggunakan --cached yang merupakan sinonim untuk --staged

git diff --cached

atau untuk melihat hanya nama file tanpa perubahan kode

git diff --staged --name-only  

git-diff manual

kecepatan
sumber