Ada pertanyaan di SO tentang pemisahan bakhil dengan menggunakan magit, dan dua solusi yang diberikan adalah dengan mem-stage wilayah (menandai wilayah, menekan tahap), atau mengecilkan / menumbuhkan semua bakhil menggunakan +
& -
. Bukan itu yang saya kejar.
Dalam status buffer magit, saya ingin membagi sebongkah menjadi dua bakhil, pada titik, atau setidaknya pada garis di sekitar titik.
Menghidupkan ini (permisi format diff buruk saya)
@@ blah blah blah
- foo
+ bar
+ baz
+
Ke
@@ blah blah
- foo
+ bar
@ blah blah
+ baz
Saat intinya ada di bar.
Motivasi:
baz
menjadi pernyataan debug, jadi saya ingin menghapusnya dari komitfoo
&bar
tanpa menghilangkannya.bar
danbaz
hanya terkait sebagian, yang berarti bahwa perubahan mereka tidak boleh dalam komit yang sama.bar
besar danbaz
kecil, membuatnya jauh lebih mudah untuk membagi potongan daripada memilihbar
Mirip dengan titik terakhir, katakan komit 20 baris berisi satu baris tengah yang tidak boleh dipentaskan. Akan lebih mudah untuk membagi & mengatur dua bakhil atas dan bawah mengabaikan yang tengah daripada menggunakan wilayah.
Hal di atas dapat muncul kadang-kadang ketika presentasi diff akan memisahkan sebelum dan sesudah sesuatu yang telah dimodifikasi, dan memiliki sesuatu yang tidak membantu di tengah. misalnya
@@ line
- old_foo
+ random stuff
+ new foo
diff-split-hunk
yang melakukan hal itu. TKI permintaan Anda adalah cara untuk menggunakandiff-split-hunk
(atau sesuatu yang setara) dari buffer status-magit.Jawaban:
Seperti yang disebutkan dalam komentar di atas, Magit tidak mendukung pemisahan sebongkah ke beberapa bakhil di luar apa yang mungkin dengan menggunakan
git diff -U<n>
. Itu karena Magit bergantung pada perintah Git untuk membuat diff. Itu tidak akan berubah, Magit akan selalu menggunakan diff yang didapatnya dari Git apa adanya.(Sebenarnya Magit menanggalkan beberapa tajuk yang tidak benar-benar relevan bagi manusia, tetapi mengembalikannya saat menerapkan perubahan. Namun memecah sebongkah lebih jauh dari apa yang
-U<n>
didukung adalah cerita yang sama sekali berbeda, itu akan mengarah ke lubang kelinci - ada alasan mengapa Git tidak mengizinkan "bakhil yang lebih kecil", itu tidak akan dapat menerapkannya).Sementara Magit tidak mendukung menampilkan bakhil yang lebih kecil seperti yang diminta di sini, Magit tidak mendukung penerapan hanya sebagian dari sebongkah. Ketika wilayah aktif saat pementasan, maka hanya bagian dari bingkah yang diterapkan.
Itu tidak banyak membantu ketika bagian yang tidak boleh dipentaskan tepat di tengah teks yang harus dipentaskan. Seperti yang disarankan orang lain, apa yang harus Anda lakukan dalam kasus ini adalah mengatur seluruh bingkah, dan kemudian membatalkan tahapan yang tidak ingin Anda lakukan pada langkah kedua.
Tentu saja itu bisa otomatis. Satu-satunya cara saya dapat melihat di mana ini bisa diotomatisasi adalah "tahap hunk saat ini kecuali untuk wilayah. Tapi saya memiliki beberapa keraguan tentang seberapa sering itu benar-benar berguna dan takut bahwa itu tidak akan mudah untuk diterapkan yang kuat Dan jadi saya saat ini tidak bermaksud untuk mengimplementasikan ini.
sumber
Anda dapat membagi bakhil dengan Magit.
Alih-alih hanya meninggalkan kursor di dalam hunk, pilih garis yang ingin Anda panggung dari hunk dan tekan s . Hanya bagian yang dipilih dari bagian yang akan dipentaskan, sedangkan bagian yang lainnya masih berada di area yang tidak dipentaskan.
Dengan begitu Anda membaginya menjadi dua. Saya pikir Anda dapat menggunakan mekanisme yang sama untuk memindahkan bagian bakhil ke simpanan. Saat menggunakan k Anda hanya akan membersihkan sebagian dari sebongkah.
sumber
Jika Anda ingin membuang bagian dari sebongkah, pilih garis di dalam sebongkah yang ingin Anda buang dan tekan x .
sumber