Lebih
Menghapus file dari Git commit
Saya menggunakan Git dan saya telah melakukan beberapa file menggunakan
git commit -a
Kemudian, saya menemukan bahwa file telah keliru telah ditambahkan ke komit.
Bagaimana saya bisa menghapus file dari komit terakhir?
1468
25
Saya pikir jawaban yang lain di sini yang salah, karena ini adalah pertanyaan yang bergerak keliru berkomitmen file kembali ke area stage dari sebelumnya melakukan, tanpa membatalkan perubahan yang dilakukan untuk mereka. Hal ini dapat dilakukan seperti Paritosh Singh yang disarankan:
atau
Kemudian mengatur ulang file yang tidak diinginkan dalam rangka untuk meninggalkan mereka keluar dari komitmen:
Sekarang komit lagi, anda bahkan dapat menggunakan kembali melakukan pesan yang sama:
PERHATIAN! Jika anda hanya ingin menghapus file dari sebelumnya melakukan, dan simpan pada disk, baca juzzlin's jawaban di atas.
Jika ini adalah anda komit terakhir dan anda ingin benar-benar menghapus file dari lokal dan remote repositori, anda dapat:
git rm <file>
git commit-mengubah
Mengubah bendera memberitahu git untuk melakukan lagi, tapi "gabung" (bukan dalam pengertian penggabungan dua cabang) ini melakukan dengan komit terakhir.
Seperti yang dinyatakan di komentar, menggunakan git
rm
di sini adalah seperti menggunakanrm
perintah itu sendiri!Ada jawaban semua berbicara tentang menghapus file yang tidak diinginkan dari lalu komit.
Jika anda ingin menghapus file yang tidak diinginkan dari tua melakukan (bahkan mendorong) dan don't ingin membuat yang baru melakukan, yang tidak perlu, karena aksi:
Menemukan berkomitmen bahwa anda ingin file yang sesuai.
anda dapat melakukan ini beberapa kali jika anda ingin menghapus banyak file.
Menemukan commit_id komit di mana file yang ditambahkan keliru, let's mengatakan "35c23c2" di sini
Perintah ini akan membuka editor sesuai dengan pengaturan anda. Default adalah vim.
Langkah terakhir melakukan, yang harus "menghapus file yang tidak diinginkan", ke baris berikutnya dari salah komit("35c23c2" dalam kasus kami), dan set perintah seperti
perbaikan
:Anda harus menjadi baik setelah menyimpan file.
Untuk menyelesaikan :
Jika anda sayangnya dapatkan konflik, anda harus menyelesaikannya secara manual.
Sebagai jawaban yang diterima menunjukkan, anda dapat melakukan ini dengan mengatur ulang seluruh komit. Tapi ini agak berat menyerahkan pendekatan. Cara yang bersih untuk melakukan hal ini akan menjaga komit, dan hanya menghapus file-file yang diubah dari itu.
The
git reset
akan mengambil file seperti di commit sebelumnya, dan tahap dalam indeks. File dalam direktori kerja tak tersentuh. Thegit commit
kemudian akan melakukan dan labu indeks ke saat ini melakukan.Ini pada dasarnya mengambil versi dari file yang telah di commit sebelumnya dan menambahkan untuk saat ini melakukan. Hal ini mengakibatkan tidak ada perubahan bersih, dan begitu file tersebut secara efektif dihapus dari melakukan.
Jika anda tidak mendorong perubahan pada server anda dapat menggunakan
Itu akan me-reset semua perubahan dan kembali ke salah satu komit kembali
Jika anda telah mendorong perubahan anda kemudian ikuti langkah-langkah seperti yang dijawab oleh @CharlesB
Menghapus file dengan menggunakan rm akan menghapusnya!
Anda're selalu menambahkan untuk komit dalam git daripada menghapus, jadi dalam hal ini pengembalian berkas ke negara itu sebelum yang pertama melakukan (ini mungkin menghapus 'rm' tindakan jika file baru) dan kemudian kembali komit dan file akan pergi.
Untuk mengembalikan file tersebut ke beberapa negara sebelumnya:
atau untuk kembali ke negara di remote KEPALA:
kemudian mengubah komit dan anda harus menemukan file yang telah menghilang dari daftar (dan tidak akan dihapus dari disk anda!)
Berikut ini akan disimpan hanya file yang anda inginkan, yang adalah apa OP yang diajukan.
Anda'll melihat sesuatu seperti berikut...
Pada titik ini, anda dapat melakukan apapun yang anda suka ke file, seperti ulang untuk versi yang berbeda.
Bila anda're siap untuk melakukan:
atau (jika anda've mendapat beberapa perubahan lain yang terjadi bahwa anda don't ingin melakukan, namun)
Saya akan menjelaskan kepada anda dengan contoh. Mari A, B, C menjadi 3 berturut-turut melakukan. Melakukan B berisi file yang tidak seharusnya dilakukan.
Jika anda secara tidak sengaja telah menambahkan sebuah file untuk anda yang berkomitmen, anda dapat melakukan sesuatu seperti
Pastikan untuk menggunakan
--cached
jika file anda juga akan dihapus dari proyek anda.akan meninggalkan anda file lokal masih. Jika anda don't ingin file tersebut baik secara lokal, anda dapat melewatkan --cached pilihan.
Jika semua pekerjaan di cabang lokal anda, anda harus menyimpan file di kemudian berkomitmen, dan ingin memiliki sejarah yang bersih, saya pikir cara yang lebih sederhana untuk melakukan hal ini bisa menjadi:
dan anda kemudian dapat menyelesaikan rebase dengan mudah tanpa harus mengingat perintah yang lebih kompleks atau pesan commit atau tipe lebih banyak.
Menggunakan git GUI dapat mempermudah menghapus file dari sebelum melakukan.
Dengan asumsi bahwa ini isn't bersama cabang dan anda don't pikiran menulis ulang sejarah, kemudian jalankan:
Anda dapat un-centang file yang keliru yang dilakukan dan kemudian klik "Melakukan".
File dihapus dari melakukan, tapi akan menjadi disimpan pada disk. Jadi jika anda un-check file setelah keliru menambahkan, itu akan menunjukkan anda tidak terlacak daftar file (dan jika anda un-check file setelah keliru memodifikasi hal itu akan menunjukkan perubahan anda tidak dipentaskan untuk melakukan daftar).
Jika anda ingin melestarikan commit anda (mungkin anda sudah menghabiskan beberapa waktu menulis rinci pesan komit dan don't ingin kehilangan itu), dan anda hanya ingin menghapus file dari melakukan, tapi bukan dari repositori seluruhnya:
Hanya ingin melengkapi jawaban atas karena saya harus berjalan ekstra perintah:
Cheers!
Melakukan urutan perintah berikut:
Sesuatu yang bekerja untuk saya, tapi masih berpikir harus ada solusi yang lebih baik:
Hanya meninggalkan perubahan yang ingin anda buang di sisi lain melakukan, memeriksa orang lain
git reset --KEPALA lembut^
angin kembali anda melakukan, dan ketika anda mengetikgit status
, itu memberitahu anda apa yang harus dilakukan:Sebenarnya, saya pikir lebih cepat dan cara yang lebih mudah adalah dengan menggunakan git rebase modus interaktif.
(atau kepala~4, seberapa jauh anda ingin pergi)
dan kemudian, bukan 'pilih', menggunakan 'edit'. Aku tidak menyadari betapa kuat 'edit' adalah.
https://www.youtube.com/watch?v=2dQosJaLN18
Harap anda akan menemukan itu berguna.
Punya masalah yang sama di mana saya memiliki perubahan dalam cabang lokal di mana saya ingin kembali hanya satu file. Apa yang bekerja untuk saya adalah -
(fitur/target_branch di bawah ini adalah di mana saya punya semua perubahan saya termasuk orang-orang yang saya ingin membatalkan untuk file tertentu)
(asal/fitur/target_branch adalah cabang terpencil di mana saya ingin mendorong perubahan)
(fitur/pementasan saya sementara pementasan cabang di mana saya akan mendorong dari semua saya ingin perubahan kecuali perubahan itu dalam satu file)
Membuat sebuah cabang lokal dari saya asal/fitur/target_branch - yang disebut * fitur/pementasan**
Bergabung saya bekerja di cabang lokal fitur/target_branch ke * fitur/pementasan** branch
Memeriksa * fitur/pementasan kemudian git reset --lembut ORIG_HEAD* (Sekarang semua perubahan dari fitur/pementasan' akan dipentaskan tetapi tidak terikat.)*
Yang belum di-stage file yang saya sebelumnya telah diperiksa dengan perubahan yang tidak perlu
Berubah hulu cabang untuk * fitur/pementasan* untuk asal/fitur/target_branch*
Berkomitmen sisa mengadakan perubahan dan mendorong hulu ke saya remote asal/fitur/target_branch
Jika anda tidak membutuhkan file itu lagi, anda bisa melakukan