Mari kita berpura-pura sejenak bahwa Anda ingin menambahkan sesuatu ke HEADkomit, yaitu "komit kedua B" dalam contoh Anda.
Popup komit pada cfitur " aAmend " mengikat . Menekan tombol itu akan "mengubah" perubahan bertahap pada HEADkomit. Karena komit tidak dapat diubah dalam Git, ini sebenarnya akan menggantikan komit lama dengan komit baru. Buffer dengan pesan komit lama akan muncul, sehingga Anda dapat memodifikasinya seandainya perubahan yang ditambahkan juga mengharuskan Anda menyesuaikan pesan. Seperti biasa, tekan C-c C-cketika Anda selesai mengedit pesan. Ini sama dengan berjalan git commit --amenddi baris perintah.
- a Mengubah - menambahkan perubahan bertahap ke
HEADdan mengedit pesan komitnya
Karena sering terjadi bahwa Anda hanya perlu menyesuaikan perubahan atau pesan, Magit menyediakan dua varian tambahan:
- e Extend - tambahkan perubahan bertahap
HEADtanpa mengedit pesan komit
- w Reword - ubah pesan
HEADtanpa menambahkan perubahan bertahap ke dalamnya
Ketika Anda ingin mengedit komit yang tidak HEAD, maka di atas tidak akan berfungsi. Perintah-perintah ini selalu "memodifikasi" (yaitu mengganti) HEADkomit. Git tidak menyediakan perintah tunggal untuk memodifikasi komit selain HEADjadi ini sedikit lebih terlibat.
Magit memang memberikan perintah seperti itu, tetapi karena ada situasi di mana lebih disukai untuk melakukan ini dalam beberapa langkah, kita akan membahasnya terlebih dahulu.
Mengubah komit selain HEADdapat dibagi menjadi tiga langkah:
- Buat sementara itu komit lain (
A) HEAD.
- Ubah
HEAD(seperti dijelaskan di atas), menghasilkan komit A'.
- Beri tahu Git untuk menerapkan kembali komitmen yang diikuti
A, tetapi di atas A'.
Ini dapat dilakukan dengan menggunakan rebase interaktif. Ketik runtuk menampilkan munculan rebase. Kemudian ketik muntuk memohon varian rebase "edit sebuah komit". Buffer dengan komit terbaru muncul. Pindah ke komit yang ingin Anda modifikasi dan ketik C-c C-cuntuk memilihnya. Git kemudian memundurkan riwayat ke komit itu dan menunjukkan informasi tentang rebase yang sedang berlangsung di buffer status.
Ubah HEADseperti dijelaskan di atas. Lalu beri tahu Git bahwa Anda selesai dengan mengetik r r. Jika A'dan Bkonflik maka rebase akan berhenti Bdan Anda harus menyelesaikan konflik. Setelah selesai, tekan r runtuk melanjutkan.
Jika Anda tahu bahwa perubahan Anda Aakan mengakibatkan konflik dengan B, maka lanjutkan seperti yang dijelaskan di atas, jika tidak gunakan pendekatan berikut.
Git memungkinkan membuat "fixup commit" menggunakan git commit --fixup A. Ini menciptakan komit baru , yang mencatat perubahan yang "seharusnya dibuat di komit lain". Komit itu menjadi yang baru HEAD. Ada juga --squashvarian. Untuk informasi tentang perbedaan, lihat git-commithalaman manual.
Untuk benar-benar menggabungkan Akomit dan komit baru A'dan kemudian mengajukan kembali Bdi atas itu Anda harus menggunakan rebase. Magit menyediakan perintah yang mudah untuk melakukannya r f.
Perbedaan utama dengan pendekatan di atas adalah bahwa di sini kita pertama-tama membuat komit baru dan kemudian kita rebase untuk menggabungkannya dengan "target" dan mengajukan permohonan kembali B. Di atas kami mulai dengan rebasing bukannya melakukan.
Dalam Magit baik --fixupdan --squashvarian yang tersedia dari komit popup, di fdan s. Tetapi Magit juga menyediakan varian "instan" dari perintah fixup dan squash pada Fdan S. Varian ini membuat komit baru seperti varian "non-instan", tetapi kemudian mereka langsung menggabungkan komit fixup dengan komit target menggunakan rebase, tanpa Anda harus memanggil perintah lain.
"Perbaikan instan" ( c F) pada dasarnya sama dengan "memperpanjang HEAD" ( c e), kecuali itu berfungsi untuk komit apa pun, bukan hanya HEAD.
Bacaan lebih lanjut: