Saya telah melakukan perubahan dan lupa menambahkan file ke set perubahan. Setelah komit lainnya, saya menyadari bahwa file tersebut sekarang hilang dari HEAD^4
komit.
Bagaimana cara menulis ulang komit sebelumnya untuk menyertakan file yang hilang?
git
git-commit
kolrie
sumber
sumber
Jawaban:
Gunakan
git rebase --interactive HEAD~4
dan seteledit
opsi untuk komit yang ingin Anda ubah.Ingatlah bahwa Anda tidak boleh memodifikasi komit yang didorong ke repositori jarak jauh dengan cara ini. Lebih baik menambahkan komit baru dengan file yang hilang dalam kasus itu.
sumber
git push -f
jika saya yakin upstream tidak berubah?add
-ed file yang hilang, jadi saya melakukan komit dengan "xxx" sebagai pesan. Kemudian saya melakukan perintah rebase, dan mengubah "xxx" commit dari "pick" menjadi "edit". Kemudian saya melakukan "git rebase --continue". Sekarang ketika saya melihat riwayat saya memiliki "xxx" sebagai komit terbaru, dan komit sebelumnya yang ingin saya tambahkan tidak berubah! Saya ingin tahu di mana kesalahan saya?Saya menyadari orang-orang dapat mencari di Google dan datang ke sini untuk menemukan jawaban yang lebih sederhana: Bagaimana jika itu hanya komitmen terakhir? (Pertanyaan OP adalah untuk memperbaiki komit ke-4 dalam sejarah)
Jika Anda berkomitmen dan menyadari bahwa Anda lupa untuk segera menambahkan beberapa file , lakukan saja:
Di mana
--no-edit
akan menyimpan pesan komit yang sama.Sangat mudah!
sumber
--amend
memiliki hash yang berbedaHEAD^4
. Tidak apa-apa seperti itu, hanya sebagai tambahan untuk referensi. ;)Jika Anda BELUM mendorong 4 komit ini, Anda dapat melakukannya sebagai berikut:
Buat file patch untuk semua komit ini:
Mundur kembali dengan 4 komit:
Tambahkan file yang hilang:
Lakukan dengan
--amend
:Terapkan kembali semua tambalan yang disimpan:
Jika Anda telah mendorong, Anda TIDAK boleh menggunakan metode ini. Sebagai gantinya, akui saja kesalahan Anda dan buat satu komitmen lagi di atas HEAD yang memperbaiki masalah ini.
sumber
git format-patch
/git am
jauh lebih baik. Yang terpenting, ini memberi Anda lebih percaya diri jika Anda mengacaukan sesuatu - komit disimpan sebagai tambalan dalam file fisik adalah jaring pengaman terbaik Anda.git gc
rm *.patch
)Meskipun jawaban yang diterima benar, namun tidak memiliki instruksi rinci tentang bagaimana melakukan pengeditan komit selama proses rebase.
Pertama, mulailah proses rebase:
Daftar komit akan disajikan, pilih komit yang ingin Anda edit dengan mengubah kata
pick
menjadiedit
dan simpan file.Lakukan modifikasi yang diperlukan dalam kode Anda (ingat untuk meminta
git add
file baru)Setelah semua modifikasi selesai, terbitkan
git commit --amend
- ini akan mengubah komit yang ditandai sebagaiedit
Panggil
git rebase --continue
yang akan menyelesaikan proses (jika ada lebih banyak komit yang ditandai sebagaiedit
, langkah di atas perlu diulangi)Catatan penting:
JANGAN hapus baris bertanda
pick
yang tidak ingin Anda edit - biarkan apa adanya. Menghapus baris ini akan mengakibatkan penghapusan komitmen terkaitGIT memaksa Anda
stash
sebelum melakukan rebasing jika direktori kerja Anda tidak bersih; Anda bisa bagaimanapungit stash pop / git stash apply
selama rebase, untuk mengubah perubahan ini (yaitu perubahan disimpan sebelum memulai proses rebase) menjadi komit yang ditandai sebagaiedit
jika terjadi kesalahan dan Anda ingin mengembalikan perubahan yang dibuat selama proses rebase sebelum selesai (yaitu Anda ingin kembali ke titik sebelum memulai rebase), gunakan
git rebase --abort
- baca juga: Cara membatalkan rebase interaktif jika --abort tidak ' t bekerja?Seperti yang dikatakan dalam jawaban yang diterima:
Jawabannya ada di Buku Git (paragraf berjudul " The Perils of Rebasing "):
sumber