Salah satu perintah yang saya temukan sangat berguna di Git adalah git add -u
membuang semuanya kecuali file yang tidak terlacak ke dalam indeks. Apakah ada kebalikan dari itu? Dalam beberapa bulan terakhir, saya sering menemukan diri saya dalam posisi di mana saya telah secara interaktif menambahkan beberapa pembaruan ke indeks dan saya ingin menambahkan semua file yang tidak terlacak ke indeks itu sebelum saya komit.
Apakah ada cara untuk menambahkan hanya file yang tidak terlacak ke indeks tanpa mengidentifikasi secara individual? Saya tidak melihat sesuatu yang jelas dalam dokumen bantuan, tapi mungkin saya melewatkannya?
Terima kasih.
.gitignore
secara khusus direkayasa untuk tujuan itu, bukangit add -u
.Jawaban:
Mudah dengan
git add -i
. Ketika
(untuk "tambahkan tak terlacak"), lalu*
(untuk "semua"), laluq
(untuk keluar) dan Anda selesai.Untuk melakukannya dengan satu perintah:
echo -e "a\n*\nq\n"|git add -i
sumber
echo -e "a\n*\nq\n"|git add -i
Argument list too long
... sangat dekat!git add -i
kemudian4
ditambahkan tidak terlacak maka*
semuaq
akan berhentigit ls-files -o --exclude-standard
memberikan file yang tidak dilacak, sehingga Anda dapat melakukan sesuatu seperti di bawah ini (atau menambahkan alias ke dalamnya):sumber
-o, --others
Show other (i.e. untracked) files in the output
Tidak persis apa yang Anda cari, tetapi saya telah menemukan ini cukup membantu:
Akan menambahkan semua file ke indeks, tetapi tanpa konten mereka. File yang tidak terlacak sekarang berperilaku seolah-olah mereka dilacak. Konten mereka akan ditampilkan di
git diff
, dan Anda dapat menambahkannya secara interaktifgit add -p
.sumber
git commit -p
berjalan melalui file baru juga.Anda dapat menambahkan ini ke file ~ / .gitconfig Anda:
Kemudian, dari commandline, jalankan:
sumber
Orang-orang telah menyarankan untuk mengirim output
git ls-files
kegit add
tetapi ini akan gagal dalam kasus di mana ada nama file yang mengandung spasi putih atau karakter glob seperti*
.Cara aman adalah menggunakan:
di mana
-z
memberitahu git untuk menggunakan\0
terminator baris dan-0
memberi tahu xargs sama. Satu-satunya kelemahan dari pendekatan ini adalah-0
opsi tersebut tidak standar, jadi hanya beberapa versi yangxargs
mendukungnya.sumber
git ls-files
daftar file dalam direktori saat ini. Jika Anda ingin membuat daftar file yang tidak dilacak dari mana saja di pohon, ini mungkin bekerja lebih baik:Untuk menambahkan semua file yang tidak dilacak di pohon:
sumber
Saya mencoba ini dan berhasil:
git stash
hanya akan menempatkan semua file terlacak yang dimodifikasi ke dalam tumpukan terpisah, kemudian file yang tersisa adalah file yang tidak terlacak. Kemudian dengan melakukangit add .
akan mem-stage semua file file yang tidak dilacak, sesuai kebutuhan. Akhirnya, untuk mendapatkan kembali semua file yang dimodifikasi dari tumpukan dengan melakukangit stash pop
sumber
Jika Anda memiliki ribuan file yang tidak dilacak (ugh, jangan tanya) maka
git add -i
tidak akan berfungsi saat menambahkan*
. Anda akan mendapatkan pesan kesalahanArgument list too long
.Jika kemudian Anda juga menggunakan Windows (jangan tanya # 2 :-) dan perlu menggunakan PowerShell untuk menambahkan semua file yang tidak dilacak, Anda dapat menggunakan perintah ini:
sumber
git ls-files -o --exclude-standard | % { git add $_ }
Banyak tips bagus di sini, tetapi di dalam Powershell saya tidak bisa membuatnya bekerja.
Saya adalah pengembang .NET dan kami masih menggunakan OS Windows karena kami belum banyak menggunakan .Net inti dan lintas platform, sehingga penggunaan sehari-hari saya dengan Git ada di lingkungan Windows, di mana shell yang digunakan lebih sering Powershell dan bukan Git bash.
Prosedur berikut dapat diikuti untuk membuat fungsi alias untuk menambahkan file yang tidak dilacak dalam repositori Git.
Di dalam file $ profile Anda dari Powershell (jika tidak ada - Anda dapat menjalankan: New-Item $ Profile)
notepad $ Profile
Sekarang tambahkan metode Powershell ini:
Simpan $ profil file dan muat kembali ke Powershell. Kemudian muat ulang file $ profile Anda dengan:. $ profil
Ini mirip dengan perintah sumber di lingkungan * nix IMHO.
Jadi lain kali Anda, jika Anda adalah pengembang yang menggunakan Powershell di Windows terhadap Git repo dan ingin hanya memasukkan file yang tidak dapat dilacak Anda dapat menjalankan:
AddUntracked-Git
Ini mengikuti konvensi Powershell di mana Anda memiliki kata benda-kata benda.
sumber
git add. (tambahkan semua file dalam direktori ini)
git add -all (tambahkan semua file di semua direktori)
git add -N dapat membantu untuk membuat daftar yang mana untuk nanti ....
sumber
git add -u
akan menambahkan file yang dimodifikasi tidakUntuk menambahkan semua file, perintah git tidak dapat dilacak adalah
Juga jika Anda ingin mendapatkan rincian lebih lanjut tentang berbagai opsi yang tersedia, Anda bisa mengetik perintah
alih-alih perintah pertama, dengan ini Anda akan mendapatkan lebih banyak opsi termasuk opsi untuk menambahkan semua file yang tidak terlacak seperti yang ditunjukkan di bawah ini:
sumber