Saya mendapat dua cabang dari tuan saya:
- v2.1 : (versi 2) Saya telah mengerjakan selama beberapa bulan
- wss : yang saya buat kemarin untuk menambahkan satu fitur khusus ke master saya (dalam produksi)
Apakah ada cara untuk menyalin commit kemarin dari wss ke v2.1?
git
branching-and-merging
Bob Walsh
sumber
sumber
Jawaban:
Anda harus benar-benar memiliki alur kerja yang memungkinkan Anda melakukan ini semua dengan menggabungkan:
Jadi yang harus Anda lakukan adalah
git checkout v2.1
dangit merge wss
. Jika karena alasan tertentu Anda benar-benar tidak dapat melakukan ini, dan Anda tidak dapat menggunakan git rebase untuk memindahkan cabang wss Anda ke tempat yang tepat, perintah untuk mengambil satu komit dari suatu tempat dan menerapkannya di tempat lain adalah git-pick ceri . Cukup periksa cabang tempat Anda ingin menerapkannya, dan jalankangit cherry-pick <SHA of commit to cherry-pick>
.Beberapa cara rebase dapat menyelamatkan Anda:
Jika riwayat Anda terlihat seperti ini:
Anda bisa menggunakan
git rebase --onto v2 v2-only wss
untuk memindahkan wss langsung ke v2:Maka Anda dapat bergabung! Jika Anda benar-benar, benar - benar , benar - benar tidak dapat mencapai titik di mana Anda dapat bergabung, Anda masih dapat menggunakan rebase untuk secara efektif melakukan beberapa pemetik ceri sekaligus:
Catatan: alasan mengapa diperlukan beberapa pekerjaan ekstra untuk melakukan ini adalah karena itu membuat duplikat komit dalam repositori Anda. Ini sebenarnya bukan hal yang baik - inti dari percabangan dan penggabungan yang mudah adalah untuk dapat melakukan segalanya dengan membuat komit (s) satu tempat dan menggabungkan mereka ke mana pun mereka dibutuhkan. Duplikat komit berarti niat untuk tidak menggabungkan kedua cabang tersebut (jika Anda memutuskan ingin melakukannya nanti, Anda akan mendapatkan konflik).
sumber
git-svn-id
referensi yang salah sebelum memasukkandcommit
lagi. Meskipun aku mungkin bisa mengabaikan langkah memilih ceri dan hanya menggunakan rebase dengan sendirinya.Menggunakan
untuk diterapkan
<commit>
ke cabang Anda saat ini .Saya sendiri mungkin akan memeriksa silang komit yang saya ambil
gitk
dan memilihnya dengan klik kanan pada entri komit di sana.Jika Anda ingin lebih otomatis (dengan semua bahayanya) dan dengan asumsi semua komit sejak kemarin terjadi pada wss Anda dapat membuat daftar komit menggunakan
git log
(dengan--pretty
disarankan oleh Jefromi)jadi semuanya bersama-sama dengan asumsi Anda gunakan
bash
Jika ada yang tidak beres di sini (ada banyak potensi) Anda dalam masalah karena ini bekerja pada checkout langsung, jadi lakukan pick-cherry manual atau gunakan rebase seperti yang disarankan oleh Jefromi.
sumber
git rebase
dalam jawaban saya lebih kuat. Secara khusus, menggunakan for for loop seperti ini, jika salah satu dari cherry-picks gagal, ia masih akan mencoba melakukan sisanya. Ini ... sangat sangat tidak baik, katakanlah.git
jawaban yang sederhana dan langsung ke solusinya, alih-alih berkelok-kelok melalui seluk beluk git untuk membuktikan seberapa baik penjawab itu mengetahuinya.git cherry-pick
: Terapkan perubahan yang diperkenalkan oleh beberapa komitmen yang adaAsumsikan kita memiliki cabang A dengan (X, Y, Z) berkomitmen. Kita perlu menambahkan komit ini untuk cabang B . Kami akan menggunakan
cherry-pick
operasi.Ketika kita menggunakan
cherry-pick
, kita harus menambahkan komit pada cabang B di urutan kronologis yang sama bahwa komit muncul dalam Cabang A .cherry-pick memang mendukung serangkaian commit, tetapi jika Anda memiliki gabungan commit dalam rentang itu, itu akan menjadi sangat rumit
Contoh alur kerja:
Kita dapat menggunakan
cherry-pick
dengan pilihan-e atau --edit : Dengan opsi ini, git cherry-pick akan memungkinkan Anda mengedit pesan komit sebelum melakukan.
-n atau --no-commit : Biasanya perintah secara otomatis membuat urutan commit. Bendera ini menerapkan perubahan yang diperlukan untuk memilih setiap komit yang dinamai ke pohon kerja Anda dan indeks, tanpa membuat komit. Selain itu, ketika opsi ini digunakan, indeks Anda tidak harus cocok dengan komit HEAD. Pilihan ceri dilakukan terhadap kondisi awal indeks Anda.
Berikut artikel menarik tentang
cherry-pick
.sumber
Anda bisa membuat tambalan dari komit yang ingin Anda salin dan menerapkan tambalan ke cabang tujuan.
sumber
git format-patch <revision range>
dangit am *.patch
.checkout
cabang lain.Atau jika Anda sedikit kurang di sisi penginjil Anda dapat melakukan sedikit cara jelek yang saya gunakan. Di deploy_template ada komit yang ingin saya salin pada master saya sebagai penyebaran cabang
Ini akan membuat penyebaran cabang baru (saya menggunakan -f untuk menimpa cabang penyebaran yang ada) di deploy_template, lalu rebase cabang baru ini ke master, membiarkan deploy_template tidak tersentuh.
sumber
Untuk kasus sederhana dengan menyalin komit terakhir dari branch wss ke v2.1, Anda cukup mengambil komit id (
git log --oneline | head -n 1
) dan lakukan:sumber
Perintah cherry-pick dapat membaca daftar commit dari input standar.
Perintah cherry-pick berikut dilakukan oleh pengguna John yang ada di cabang "mengembangkan" tetapi tidak di cabang "rilis", dan melakukannya dalam urutan kronologis.
sumber