Pertanyaan Hapus file dari Git commit


Saya menggunakan Git dan saya telah melakukan beberapa file menggunakan

git commit -a

Kemudian, saya menemukan bahwa file telah salah ditambahkan ke komit.

Bagaimana saya bisa menghapus file dari commit terakhir?


1091
2017-09-18 16:59


asal


Jawaban:


Saya pikir jawaban lain di sini salah, karena ini adalah pertanyaan memindahkan file yang secara keliru berkomitmen kembali ke area pementasan dari commit sebelumnya, tanpa membatalkan perubahan yang dilakukan pada mereka. Ini bisa dilakukan seperti yang disarankan Paritosh Singh:

git reset --soft HEAD^ 

atau

git reset --soft HEAD~1

Kemudian atur ulang file yang tidak diinginkan untuk meninggalkannya dari commit:

git reset HEAD path/to/unwanted_file

Sekarang komit lagi, Anda bahkan dapat menggunakan kembali pesan komit yang sama:

git commit -c ORIG_HEAD  

2096
2018-03-10 10:56



PERHATIAN! Jika Anda hanya ingin menghapus file dari commit sebelumnya, dan simpan di disk, Baca baca Jawaban juzzlin tepat di atas.

Jika ini adalah komitmen terakhir Anda dan Anda ingin sepenuhnya hapus file dari repositori lokal dan remote Anda, kamu bisa:

  1. hapus file git rm <file>
  2. komit dengan mengamandemen bendera: git commit --amend

Amend flag memberi tahu git untuk melakukan commit lagi, tetapi "merge" (bukan dalam arti menggabungkan dua branch) ini melakukan commit dengan commit terakhir.

Sebagaimana tercantum dalam komentar, menggunakan git rm disini seperti menggunakan rm perintah itu sendiri!


217
2017-09-18 17:22



Jawaban yang ada semua berbicara tentang menghapus file yang tidak diinginkan dari terakhir melakukan.

Jika Anda ingin menghapus file yang tidak diinginkan dari tua commit (bahkan mendorong) dan tidak ingin membuat commit baru, yang tidak diperlukan, karena tindakan:

1

Temukan commit yang Anda inginkan agar file tersebut sesuai.

git checkout <commit_id> <path_to_file>

Anda dapat melakukan ini beberapa kali jika Anda ingin menghapus banyak file.

2

git commit -am "remove unwanted files"

3

Temukan commit_id dari commit di mana file-file itu ditambahkan secara keliru, katakanlah "35c23c2" di sini

git rebase 35c23c2~1 -i  // notice: "~1" is necessary

Perintah ini membuka editor sesuai dengan pengaturan Anda. Yang standar adalah vim.

Pindahkan commit terakhir, yang seharusnya "hapus file yang tidak diinginkan", ke baris berikutnya dari commit yang salah ("35c23c2" dalam kasus kami), dan setel perintah sebagai fixup:

pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files

Anda harus baik setelah menyimpan file.

Menyelesaikan :

git push -f

Jika Anda sayangnya mendapatkan konflik, Anda harus menyelesaikannya secara manual.


106
2018-01-27 15:24



Saat jawaban yang diterima menunjukkan, Anda dapat melakukan ini dengan mengatur ulang seluruh commit. Tapi ini pendekatan yang agak berat.
Cara yang lebih bersih untuk melakukan ini adalah dengan menjaga komit, dan cukup hapus file yang diubah darinya.

git reset HEAD^ -- path/to/file
git commit --amend --no-edit

Itu git reset akan mengambil file seperti sebelumnya di commit sebelumnya, dan mementaskannya dalam indeks. File di direktori kerja tidak tersentuh.
Itu git commit kemudian akan melakukan dan menekan indeks ke dalam commit saat ini.

Ini pada dasarnya mengambil versi file yang ada di commit sebelumnya dan menambahkannya ke commit saat ini. Hal ini tidak menghasilkan perubahan bersih, sehingga file dihapus secara efektif dari komit.


60
2018-02-25 00:06



Jika Anda belum mendorong perubahan pada server yang dapat Anda gunakan

git reset --soft HEAD~1

Ini akan mengatur ulang semua perubahan dan kembali ke satu commit kembali

Jika Anda telah mendorong perubahan Anda, ikuti langkah-langkah seperti dijawab oleh @CharlesB


35
2017-09-18 18:28



Menghapus file menggunakan rm akan menghapusnya!

Anda selalu menambah komit dalam git daripada menghapus, jadi dalam contoh ini kembalikan file ke keadaan sebelum komit pertama (ini mungkin tindakan hapus 'rm' jika file baru) dan kemudian re-commit dan file akan pergi.

Untuk mengembalikan file ke keadaan sebelumnya:

    git checkout <commit_id> <path_to_file>

atau mengembalikannya ke kondisi di KEPALA terpencil:

    git checkout origin/master <path_to_file>

kemudian ubah commit dan Anda harus mencari file yang hilang dari daftar (dan tidak dihapus dari disk Anda!)


34
2018-01-28 14:00



git checkout HEAD~ path/to/file
git commit --amend

32
2017-08-23 19:01



Yang berikut ini hanya akan menampilkan file yang Anda inginkan, yang adalah apa yang diminta OP.

git reset HEAD^ /path/to/file

Anda akan melihat sesuatu seperti berikut ...

Perubahan yang harus dilakukan: (gunakan "git reset HEAD ..." ke unstage)

dimodifikasi: / path / ke / file

Perubahan tidak dipentaskan untuk commit: (gunakan "git add ..." untuk memperbarui   apa yang akan dilakukan) (gunakan "git checkout - ..." untuk dibuang   perubahan dalam direktori kerja)

dimodifikasi: / path / ke / file

  • "Perubahan yang akan dilakukan" adalah versi file sebelumnya sebelum commit. Ini akan terlihat seperti penghapusan jika file tidak pernah ada. Jika Anda melakukan perubahan ini, akan ada revisi yang mengembalikan perubahan ke file di cabang Anda.
  • "Perubahan tidak dipentaskan untuk berkomitmen" adalah perubahan yang Anda lakukan, dan status file saat ini

Pada titik ini, Anda dapat melakukan apa pun yang Anda suka ke file tersebut, seperti mengatur ulang ke versi yang berbeda.

Saat Anda siap berkomitmen:

git commit --amend -a

atau (jika Anda memiliki beberapa perubahan lain yang Anda tidak ingin lakukan, belum)

git commit add /path/to/file
git commit --amend

28
2017-12-07 07:13



Jika Anda ingin mempertahankan komitmen Anda (mungkin Anda sudah menghabiskan beberapa waktu menulis pesan komit rinci dan tidak ingin kehilangannya), dan Anda hanya ingin menghapus file dari commit, tetapi tidak dari repositori sepenuhnya:

git checkout origin/<remote-branch> <filename>
git commit --amend

9
2018-06-17 20:07