Mari kita berpura-pura sejenak bahwa Anda ingin menambahkan sesuatu ke HEAD
komit, yaitu "komit kedua B" dalam contoh Anda.
Popup komit pada cfitur " aAmend " mengikat . Menekan tombol itu akan "mengubah" perubahan bertahap pada HEAD
komit. 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 --amend
di baris perintah.
- a Mengubah - menambahkan perubahan bertahap ke
HEAD
dan mengedit pesan komitnya
Karena sering terjadi bahwa Anda hanya perlu menyesuaikan perubahan atau pesan, Magit menyediakan dua varian tambahan:
- e Extend - tambahkan perubahan bertahap
HEAD
tanpa mengedit pesan komit
- w Reword - ubah pesan
HEAD
tanpa 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) HEAD
komit. Git tidak menyediakan perintah tunggal untuk memodifikasi komit selain HEAD
jadi 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 HEAD
dapat 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 HEAD
seperti dijelaskan di atas. Lalu beri tahu Git bahwa Anda selesai dengan mengetik r r. Jika A'
dan B
konflik maka rebase akan berhenti B
dan Anda harus menyelesaikan konflik. Setelah selesai, tekan r runtuk melanjutkan.
Jika Anda tahu bahwa perubahan Anda A
akan 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 --squash
varian. Untuk informasi tentang perbedaan, lihat git-commit
halaman manual.
Untuk benar-benar menggabungkan A
komit dan komit baru A'
dan kemudian mengajukan kembali B
di 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 --fixup
dan --squash
varian 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:
git-commit
halaman manual pengalihan kegit-rebase(1)
yang memiliki baris ini: Pesan komit yang disarankan untuk komit dilipat adalah gabungan dari pesan komit dari komit pertama dan orang-orang dengan perintah "squash", tetapi menghilangkan pesan komit komit dengan "fixup" perintah. IOW, menggunakan fixup jika Anda hanya ingin memperbaiki kode di komit sebelumnya, penggunaan labu jika Anda juga ingin memperbaiki pesan commit.git commit --amend –C HEAD
adalah perintah Git yang ingin Anda cari, dan Anda dapat melakukan perbaikan dengan MagitC-c C-a
.sumber
C-c C-a
dari versi yang lebih lama (saya pikir). Selain itu, saya tidak melihat jejak "ubah" di buffer bantuan (?
).Jadi satu alur kerja adalah:
Kemudian
Autosquash secara otomatis akan memindahkan semua! Fixup melakukan ke tempat yang tepat dan mengaturnya untuk terjepit di re-base.
sumber
i
menghasilkan sayaCannot rebase: Your index contains uncommitted changes. Please commit or stash them.
. Kecuali saya tidak memiliki perubahan yang tidak dikomit. : /Proceed despite merge in rebase range? [c]ontinue, [s]elect other, [a]bort
,. Apakah ini mencoba untuk memberi tahu saya bahwa perbaikan saya mungkin gagal pada penggabungan yang akan datang?merge in rebase
, lihat BUGS di bawahgit help rebase
. Saya sarankan melakukan perbaikan sebelum menarik ke atas.Untuk mengubah komit terakhir, ini "c a". Fixup adalah untuk memperbaiki beberapa commit yang lebih lama.
sumber