Apakah maksud Anda "setel ulang ke apa yang ada sebelumnya" atau "hapus, karena saya tidak ingin file itu lagi"?
Andrew Aylett
Dalam kasus saya itu sama karena file itu tidak ada sebelumnya ...
hcs42
Jawaban:
505
Kamu ingin:
git rm --cached [file]
Jika Anda menghilangkan --cachedopsi, itu juga akan menghapusnya dari pohon yang berfungsi. git rmsedikit lebih aman daripada git reset, karena Anda akan diperingatkan jika konten yang dipentaskan tidak cocok dengan ujung cabang atau file pada disk. (Jika tidak, Anda harus menambahkan --force.)
Ini juga berfungsi dengan baik jika misalnya Anda tidak sengaja memeriksa di beberapa intermediate build atau file konfigurasi lokal yang tidak membuatnya menjadi .gitignore Anda; gunakan git rm --cacheduntuk menghapusnya dari repo, tambahkan file atau direktori yang relevan ke .gitignore, stage dan komit seperti biasa. Mereka akan hilang dari repo tetapi tetap tidak tersentuh di pohon lokal Anda, dan Anda tidak akan sengaja memeriksanya lagi.
Ionoclast Brigham
22
Ini juga menghapus file dari repo (jarak jauh) setelah Anda melakukan dan mendorong.
bubuk366
6
Ini tidak menghapusnya dari indeks, tetapi menandainya sebagai dihapus dalam indeks.
JotaBe
4
Jawaban ini kemungkinan besar salah karena menghapus file dari repo (seperti @ powder366 sudah sebutkan) yang bukan hasil yang diinginkan.
otomo
1
Solusi ini tidak berhasil untuk saya. Itu menandai file yang ditentukan sebagai dihapus, dan kemudian menghapusnya dari repo lokal.
paiego
134
Ini harus menghapus stage <file> untuk Anda (tanpa menghapus atau memodifikasi file):
Bergantung pada alur kerja Anda, ini mungkin jenis hal yang jarang Anda butuhkan sehingga tidak ada gunanya mencoba mencari solusi baris perintah (kecuali Anda kebetulan bekerja tanpa antarmuka grafis untuk beberapa alasan).
Cukup gunakan salah satu alat berbasis GUI yang mendukung manajemen indeks, misalnya:
git gui <- menggunakan framework windowing Tk - style yang mirip dengan gitk
git cola <- antarmuka GUI yang lebih modern
Ini memungkinkan Anda memindahkan file masuk dan keluar dari indeks dengan titik-dan-klik. Mereka bahkan memiliki dukungan untuk memilih dan memindahkan sebagian file (perubahan individu) ke dan dari indeks.
Bagaimana dengan perspektif yang berbeda: Jika Anda mengacaukan saat menggunakan salah satu dari perintah yang disarankan, agak samar,:
git rm --cached [file]
git reset HEAD <file>
... Anda memiliki peluang nyata untuk kehilangan data - atau setidaknya membuatnya sulit ditemukan. Kecuali Anda benar-benar perlu melakukan ini dengan frekuensi sangat tinggi, menggunakan alat GUI kemungkinan lebih aman .
Bekerja tanpa indeks
Berdasarkan komentar dan suara, saya menyadari bahwa banyak orang menggunakan indeks setiap saat. Bukan saya. Begini caranya:
Komit seluruh copy pekerjaan saya (kasus umum): git commit -a
Komit hanya beberapa file: git commit (list of files)
Komit semua kecuali beberapa file yang dimodifikasi: git commit -alalu ubah melaluigit gui
Tinjau secara grafis semua perubahan pada copy pekerjaan: git difftool --dir-diff --tool=meld
@ Martin: Saya kira itu tergantung pada alur kerja Anda. Dalam pendekatan saya, saya tidak pernah menggunakan indeks secara langsung. Ketika saya ingin menyimpan pekerjaan saya, saya hanya melakukan komitmen penuh git commit -a. Ketika saya menjawab pertanyaan ini, itu karena saya telah melakukan " inverse cherry pick " yang eksotis yang menempatkan file dalam indeks untuk Anda, tetapi saya ingin mengedit file sebelum melakukan. Saya mengambil file dari indeks sementara saya mengeditnya sehingga diffs akan bekerja seperti biasa.
nobar
case penggunaan saya sangat sempit dan tidak berguna memang: membuat cabang; tambahkan folder yang diisi dengan file hanya untuk cabang; beralih ke master; menggabungkan; ops, menambahkan folder yang salah untuk dikuasai, menambahkannya ke gitignore; file tidak akan dihapus dari komitmen - diberikan, solusi yang lebih baik hanya akan rmlangsung menggunakan tetapi saya pikir beralih cabang tidak akan membunuh folder yang diabaikan . tapi ... Saya menggunakan alat github "berbasis gui" yang cukup bagus untuk saya dan mendukung beberapa manajemen indeks kecuali itu tidak mendukung ini. jadi apa, haruskah saya menggunakan 2 gui untuk penggunaan yang sempit? masih tidak setuju dengan jawaban.
cregox
3
Ini adalah jawaban yang jelas tidak populer. Namun, saya cukup yakin bahwa pendekatan yang saya sarankan adalah yang tepat untuk beberapa orang (termasuk saya sendiri). Saya menggunakan salah satu alat ini untuk memanipulasi indeks beberapa kali per tahun.
nobar
1
Saat ini editor dan IDE pemrograman cenderung mendukung manipulasi indeks grafis. Setidaknya GitHub's Atom melakukannya.
nobar
1
Saya lebih suka antarmuka cli daripada gui setiap hari meskipun lebih berbahaya. Ini akan memungkinkan saya untuk menggunakan git bahkan tanpa gui yang menurut saya menghibur (bukannya hilang ketika saya tidak dapat menginstal alat seperti itu pada server jarak jauh misalnya). Semua yang mengatakan jawaban ini benar-benar valid dan tidak pantas menerima downvotes "elit elit", +1 karena memberikan alternatif gui yang bagus!
Jawaban:
Kamu ingin:
Jika Anda menghilangkan
--cached
opsi, itu juga akan menghapusnya dari pohon yang berfungsi.git rm
sedikit lebih aman daripadagit reset
, karena Anda akan diperingatkan jika konten yang dipentaskan tidak cocok dengan ujung cabang atau file pada disk. (Jika tidak, Anda harus menambahkan--force
.)sumber
git rm --cached
untuk menghapusnya dari repo, tambahkan file atau direktori yang relevan ke .gitignore, stage dan komit seperti biasa. Mereka akan hilang dari repo tetapi tetap tidak tersentuh di pohon lokal Anda, dan Anda tidak akan sengaja memeriksanya lagi.Ini harus menghapus stage <file> untuk Anda (tanpa menghapus atau memodifikasi file):
sumber
HEAD
.HEAD
!untuk menghapus file tertentu dari indeks.
dan
git reset HEAD
untuk menghapus semua file yang diindeks.
sumber
Bergantung pada alur kerja Anda, ini mungkin jenis hal yang jarang Anda butuhkan sehingga tidak ada gunanya mencoba mencari solusi baris perintah (kecuali Anda kebetulan bekerja tanpa antarmuka grafis untuk beberapa alasan).
Cukup gunakan salah satu alat berbasis GUI yang mendukung manajemen indeks, misalnya:
git gui
<- menggunakan framework windowing Tk - style yang mirip dengangitk
git cola
<- antarmuka GUI yang lebih modernIni memungkinkan Anda memindahkan file masuk dan keluar dari indeks dengan titik-dan-klik. Mereka bahkan memiliki dukungan untuk memilih dan memindahkan sebagian file (perubahan individu) ke dan dari indeks.
Bagaimana dengan perspektif yang berbeda: Jika Anda mengacaukan saat menggunakan salah satu dari perintah yang disarankan, agak samar,:
git rm --cached [file]
git reset HEAD <file>
... Anda memiliki peluang nyata untuk kehilangan data - atau setidaknya membuatnya sulit ditemukan. Kecuali Anda benar-benar perlu melakukan ini dengan frekuensi sangat tinggi, menggunakan alat GUI kemungkinan lebih aman .
Bekerja tanpa indeks
Berdasarkan komentar dan suara, saya menyadari bahwa banyak orang menggunakan indeks setiap saat. Bukan saya. Begini caranya:
git commit -a
git commit (list of files)
git commit -a
lalu ubah melaluigit gui
git difftool --dir-diff --tool=meld
sumber
git commit -a
. Ketika saya menjawab pertanyaan ini, itu karena saya telah melakukan " inverse cherry pick " yang eksotis yang menempatkan file dalam indeks untuk Anda, tetapi saya ingin mengedit file sebelum melakukan. Saya mengambil file dari indeks sementara saya mengeditnya sehingga diffs akan bekerja seperti biasa.rm
langsung menggunakan tetapi saya pikir beralih cabang tidak akan membunuh folder yang diabaikan . tapi ... Saya menggunakan alat github "berbasis gui" yang cukup bagus untuk saya dan mendukung beberapa manajemen indeks kecuali itu tidak mendukung ini. jadi apa, haruskah saya menggunakan 2 gui untuk penggunaan yang sempit? masih tidak setuju dengan jawaban.