Situasi: Saya memiliki repositori Git dengan file yang sudah ada dalam indeks. Saya membuat perubahan pada beberapa file, buka Git dan tambahkan file-file ini ke area pementasan saya dengan "git add."
Pertanyaan: Bagaimana cara menghapus salah satu file dari area pementasan tetapi tidak menghapusnya dari indeks atau membatalkan perubahan ke file itu sendiri?
git
version-control
staging
PHLAK
sumber
sumber
Jawaban:
Jika saya memahami pertanyaan dengan benar, Anda hanya ingin "membatalkan"
git add
yang telah dilakukan untuk file itu.Jika Anda perlu menghapus satu file dari area pementasan, gunakan
git reset HEAD -- <file>
Jika Anda perlu menghapus seluruh direktori (folder) dari area pementasan, gunakan
git reset HEAD -- <directoryName>
Modifikasi Anda akan disimpan. Ketika Anda menjalankan
git status
file sekali lagi akan muncul sebagai dimodifikasi tetapi belum dipentaskan.Lihat
git reset
halaman manual untuk detailnya.sumber
git rm --cached FILE
seperti yang disarankan oleh jawaban lain.,
sumber
git reset
sini saya pikir, karena Anda dapat menghilangkan opsi --chached dan cepat sedih menggunakangit rm
perintah :-) Dengangit reset
Anda berada di sisi yang aman, jika Anda lupa menambahkan "beberapa opsi" itu akan simpan kembaliannya agar lebih aman untuk penggunaan sehari-hari (saya bicarakangit reset --hard
).git rm --cached FILE
menghapus file secara bertahap, tanpa menghapus file dari pohon yang berfungsi. Ini berbeda dari pertanyaan, yaitu tentang kehancurangit add
.git rm --cached
akan menyebabkan file dihapus dari indeks, yaitu file tersebut akan menjadi file yang tidak terlacak . Saya tidak berpikir ini yang diinginkan OP. Silakan lihat utas terkait di sini: stackoverflow.com/questions/45047810/…git reset <file>
Berfungsi apakah Anda memiliki komitmen sebelumnya atau tidak.
sumber
Jadi, sedikit perubahan pada jawaban Tim Henigan: Anda harus menggunakan - sebelum nama file. Akan terlihat seperti ini:
sumber
--
dilakukan dan mengapa menambahkannya? Saya lakukangit reset HEAD <file>
dan itu berhasil.--
adalah jenis pembagi. Jika nama file tidak konvensional, misal (-f
ataumaster
) git akan menafsirkannya sebagai argumen baris perintah atau nama cabang alih-alih nama file. Lihat di siniJika Anda memiliki modifikasi dalam filename.txt, Anda menambahkannya secara bertahap dan Anda ingin menghapus file dari pementasan tetapi Anda tidak ingin kehilangan perubahan.
sumber
Jika Anda hanya ingin menghapus sebagian dari perubahan pada file Anda, Anda dapat menggunakan:
atau
Perintah ini pada dasarnya kebalikan dari
git add -p
: hanya akan menghapus perubahan yang dipilih dari area pementasan. Saya menemukan ini sangat berguna dalam "unadding" sesuatu yang saya tambahkan secara tidak sengaja.sumber
Jika Anda ingin menghapus file mengikuti pola tertentu dan Anda gunakan
git rm --cached
, Anda dapat menggunakan pola glob-file juga.Lihat di sini .
sumber
Kamu ingin:
Mempengaruhi satu file
Hapus file dari area pementasan
Tidak menghapus satu file dari indeks
Jangan batalkan perubahan itu sendiri
dan solusinya adalah
atau
sumber
Ketika Anda melakukannya
git status
, Git memberi tahu Anda cara unstage:Jadi
git reset HEAD <file>
bekerja untuk saya dan perubahan itu tidak tersentuh.sumber
Saya pikir Anda mungkin bingung dengan konsep indeks , seperti komentar @CB Bailey:
Anda hanya dapat mempertimbangkan direktori pementasan dan indeks sebagai hal yang sama.
Jadi, sama seperti jawaban @Tim Henigan , saya kira:
Inilah jawaban saya:
Secara umum, ada dua cara untuk membatalkan operasi tahap , seperti jawaban lain yang telah disebutkan:
dan
Tapi apa bedanya?
Asumsikan file telah dipentaskan dan ada di direktori kerja juga, gunakan
git rm --cached <file>
jika Anda ingin menghapusnya dari direktori pementasan , dan simpan file dalam direktori kerja . Tetapi perhatikan bahwa operasi ini tidak hanya akan menghapus file dari direktori staging tetapi juga menandai file tersebutdeleted
di direktori staging , jika Anda menggunakansetelah operasi ini, Anda akan melihat ini:
Ini adalah catatan untuk menghapus file dari direktori pementasan . Jika Anda tidak ingin menyimpan catatan itu dan hanya ingin membatalkan operasi tahap file sebelumnya, gunakan
git reset HEAD <file>
saja.-------- AKHIR JAWABAN --------
PS: Saya perhatikan ada jawaban yang disebutkan:
git checkout -- <file>
Perintah ini untuk situasi ketika file telah dipentaskan , tetapi file tersebut telah dimodifikasi dalam direktori kerja setelah dipentaskan, gunakan operasi ini untuk mengembalikan file dalam direktori yang berfungsi dari direktori staging . Dengan kata lain, setelah operasi ini, perubahan terjadi di direktori kerja Anda , BUKAN direktori pementasan Anda .
sumber
Setelah versi
2.23
, Git telah memperkenalkangit restore
perintah yang dapat Anda gunakan untuk melakukan itu. Mengutip dokumentasi resmi:Jadi Anda dapat memohon
git restore --staged <path>
dan menghapus stage file tetapi juga menyimpan perubahan yang Anda buat. Ingat bahwa jika file itu tidak dipentaskan Anda kehilangan semua perubahan yang Anda buat untuk itu.sumber
Untuk versi Git yang lebih baru ada
git restore --staged <file>
.Ketika saya melakukan
git status
dengan versi Git2.26.2.windows.1
juga disarankan untuk tidak melakukan staging:( Posting ini menunjukkan, bahwa dalam versi sebelumnya
git reset HEAD
direkomendasikan pada saat ini)Saya sangat merekomendasikan posting ini menjelaskan perbedaan antara
git revert
,git restore
dangit reset
dan juga parameter tambahan untukgit restore
.sumber
Jika Anda membuat perubahan pada banyak file yang dilacak tetapi hanya ingin melakukan beberapa tahapan, lakukan a
git add .
tidak selalu menguntungkan (atau disarankan) - karena ini menggerakkan semua file yang dilacak (beberapa kasus di mana Anda ingin menyimpan perubahan hanya untuk diri sendiri dan tidak ingin mengarahkannya ke repositori jarak jauh).
juga tidak ideal melakukan banyak
git add path/to/file1 path/to/file2
jika Anda memiliki banyak direktori bersarang (yang merupakan kasus di sebagian besar proyek) - akan mengganggu
Saat itulah Git GUI sangat membantu (mungkin hanya waktu saya menggunakannya). Cukup buka Git GUI, itu menunjukkan bagian file bertahap dan tidak bertahap. Pilih file dari bagian panggung yang ingin Anda hapus stage dan tekan
untuk unstage mereka.
sumber
Sampel saya:
Seperti yang Anda perhatikan
sumber
Anda harus berada di direktori file dan kemudian ketik berikut ini ke terminal
Asumsinya adalah Anda hanya perlu mereset satu file.
sumber
Untuk membatalkan tahapan semuanya sekaligus, jalankan perintah ini
sumber
git checkout -- <file>
Ini berfungsi dengan baik untuk menghapus file dari Staging Area
sumber
Dalam kasus saya, saya lakukan
sumber