Situasi:
- master ada di X
- quickfix1 ada di X + 2 komit
Seperti yang:
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
Kemudian saya mulai bekerja pada quickfix2, tetapi secara tidak sengaja mengambil quickfix1 sebagai cabang sumber untuk menyalin, bukan master. Sekarang quickfix2 ada di X + 2 commit + 2 commit yang relevan.
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
\
q2a--q2b (quickfix2 HEAD)
Sekarang saya ingin memiliki cabang dengan quickfix2, tetapi tanpa 2 commit yang termasuk dalam quickfix1.
q2a'--q2b' (quickfix2 HEAD)
/
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
Saya mencoba membuat tambalan dari revisi tertentu di quickfix2, tetapi tambalan tidak mempertahankan sejarah komit. Apakah ada cara untuk menyimpan histori komit saya, tetapi memiliki cabang tanpa perubahan di quickfix1?
quickfix1
. (Perhatikan juga perbedaan jawaban.)Jawaban:
Ini adalah kasus klasik dari
rebase --onto
:Jadi kamu harus pergi
untuk:
Ini paling baik dilakukan pada pohon yang bersih.
Lihat
git config --global rebase.autostash true
, terutama setelah Git 2.10 .sumber
q2a
keX
dan pilih Rebase 2 komit dari opsi dialog yang terjadi.git rebase --onto
.rebase.autostash
konfigurasi: yang akan menghindari hilangnya pekerjaan yang sedang berjalan di pohon kerja saat melakukan rebase.Anda dapat menggunakan
git cherry-pick
untuk hanya memilih komit yang ingin Anda salin.Mungkin cara terbaik adalah membuat cabang keluar dari master, kemudian dalam cabang itu gunakan
git cherry-pick
pada 2 commit dari quickfix2 yang Anda inginkan.sumber
Hal paling sederhana yang dapat Anda lakukan adalah memilih cherry range. Itu melakukan hal yang sama seperti
rebase --onto
tetapi lebih mudah bagi mata :)sumber
rebase --onto
juga mempertahankan perubahan asli?rebase
dancherry-pick
memberi Anda kunci SHA baru. Itu karena setiap komit adalah snapshot unik dari repositori.cherry-pick
kisaran seperti dalam jawaban ini dan itu membingungkan repo saya. Saya harus melakukan individucherry-pick
untuk setiap komitmen. (Dan mungkin tidak usah dikatakan, tetapi jika ada orang yang berjuang, Anda haruscherry-pick
mengikuti urutan kronologis bahwa komitmen Anda diterapkan.)git checkout
sangat penting di sini. apa KEPALA mu :)?Saya percaya itu:
sumber
cherry-pick
bekerja dengan hash komit jadi, jika Anda hanya ingin mengambil komit dari suatu tempat dan meletakkannya di tempat lain ini adalah cara untuk pergi. Pastikan Anda melakukancheckout <branch>
yang benar dari cabang pertama.Perintah lain yang lebih berguna di sini dengan penjelasan: Git Guide
sumber