Dalam repositori saya, saya memiliki cabang bernama aq
yang saya kerjakan.
Saya kemudian melakukan pekerjaan baru dan bug di master
.
Apa cara terbaik untuk memasukkan komitmen itu ke aq
cabang? Buat cabang baru dari master
dan gabungkan dengan aq
?
git
version-control
git-merge
Lengan
sumber
sumber
git pull origin my_branch_name
Jawaban:
Lihat
aq
cabang, dan rebase darimaster
.sumber
git merge
akan lebih baik. Jika kedua cabang berkembang dari waktu ke waktu, Anda harus mempertimbangkan mana yang terbaik untuk Anda.Anda harus bisa tepat
git merge origin/master
ketika Anda berada di cabang aq Anda.sumber
rebase
jika cabang Anda lokal dan belum didorongorigin
. Gunakanmerge
jika cabang Anda sudah didorong.rebase
akan menulis ulang sejarah.Pertama-tama periksa untuk dikuasai:
Lakukan semua perubahan, perbaikan terbaru dan lakukan dan tekan master Anda.
Kembali ke cabang Anda, 'aq', dan gabungkan master di dalamnya:
Cabang Anda akan diperbarui dengan master. Contoh penggabungan yang baik dan dasar adalah 3.2 Git Branching - Basic Branching and Merging .
sumber
Tidak ada jaminan bahwa perbaikan bug utama tidak ada di antara komitmen lainnya, karenanya Anda tidak bisa begitu saja menggabungkan. Melakukan
dengan asumsi komit tersebut merepresentasikan perbaikan bug.
Mulai sekarang, tetap perbaiki bug di cabang terpisah. Anda akan bisa adil
ketika Anda ingin menggulung semuanya ke cabang dev biasa.
sumber
Entah
cherry-pick
yang bersangkutan berkomitmen menjadi cabangaq
atau menggabungkan cabangmaster
menjadi cabangaq
.sumber
Gabungkan dengan
aq
sumber
Jalan mudah
sumber
Bagi saya, saya sudah memiliki perubahan di tempat dan saya ingin yang terbaru dari cabang dasar. Saya tidak dapat melakukan
rebase
, dancherry-pick
akan mengambil selamanya, jadi saya melakukan yang berikut:jadi dalam hal ini:
sumber
Ini ( dari sini ) bekerja untuk saya:
Mengutip:
sumber
Anda memiliki beberapa opsi.
git rebase master aq
ke cabang yang akan menyimpan nama-nama komit, tetapi JANGAN REBASE jika ini adalah cabang terpencil. Anda bisagit merge master aq
jika Anda tidak peduli tentang menjaga nama komit. Jika Anda ingin menyimpan nama komit dan itu adalah cabang terpencilgit cherry-pick <commit hash>
komit ke cabang Anda.sumber
Anda juga dapat melakukan ini dengan menjalankan satu baris.
git merge aq master
Ini setara dengan
sumber
git merge a b
menggabungkan cabanga
danb
menjadi cabang saat ini. Tetapigit merge a
ketika Anda berada di cabanga
tidak akan melakukan apa-apa (itulah sebabnya ini terlihat seperti melakukan apa yang menurut Anda sedang dilakukan). (Lihat git-scm.com/docs/git-merge#Documentation/… .)EDIT:
Jawaban saya di bawah dokumen cara untuk menggabungkan
master
keaq
, di mana jika Anda melihat rincian penggabungan itu daftar perubahan yang dibuat padaaq
sebelum penggabungan, bukan perubahan yang dibuat padamaster
. Saya menyadari bahwa itu mungkin bukan yang Anda inginkan, bahkan jika Anda mengira itu!Hanya:
baik-baik saja.
Ya, penggabungan sederhana ini akan menunjukkan bahwa perubahan dari
master
dibuat padaaq
saat itu, bukan sebaliknya; tapi tidak apa-apa - karena memang itulah yang terjadi! Kemudian, ketika Anda akhirnya menggabungkan cabang Andamaster
, saat itulah akhirnya gabungan akan menampilkan semua perubahan Anda sebagaimana dibuatmaster
(yang persis seperti yang Anda inginkan, dan merupakan komit di mana orang akan berharap untuk menemukan info itu pula).Saya telah memeriksa dan pendekatan di bawah ini juga menunjukkan perubahan yang persis sama (semua perubahan dibuat
aq
sejak pemisahan asli antaraaq
danmaster
) seperti pendekatan normal di atas, ketika Anda akhirnya menggabungkan semuanya kembalimaster
. Jadi saya pikir satu-satunya kerugian nyata (selain dari terlalu kompleks dan non-standar ...: - /) adalah bahwa jika Anda membatalkan kembali perubahan terbaru dengangit reset --hard HEAD~<n>
dan ini melewati penggabungan, maka versi di bawah ini menggulung kembali ke bawah cabang 'salah', yang harus Anda perbaiki dengan tangan (mis. dengangit reflog
&git reset --hard [sha]
).[Jadi, yang kupikirkan sebelumnya adalah:]
Ada masalah dengan:
karena perubahan yang ditampilkan di komit gabungan (mis. jika Anda melihat sekarang atau nanti di Github, Bitbucket atau penampil riwayat git lokal favorit Anda) adalah perubahan yang dibuat pada master, yang mungkin bukan yang Anda inginkan.
Di samping itu
menunjukkan perubahan yang dibuat dalam aq, yang mungkin adalah apa yang Anda inginkan. (Atau, paling tidak, ini sering yang saya inginkan!) Tetapi gabungan yang menunjukkan perubahan yang tepat ada di cabang yang salah!
Bagaimana cara mengatasinya ?!
Proses penuh, berakhir dengan komit gabungan yang menunjukkan perubahan yang dibuat pada aq (seperti gabungan kedua di atas), tetapi dengan gabungan yang mempengaruhi cabang aq, adalah:
Ini: menggabungkan aq ke master, maju cepat yang sama menggabungkan ke aq, membatalkannya pada master, dan menempatkan Anda kembali pada aq lagi!
Saya merasa seperti kehilangan sesuatu - ini sepertinya sesuatu yang jelas Anda inginkan, dan sesuatu yang sulit dilakukan.
Juga, rebase TIDAK setara. Kehilangan cap waktu dan identitas dari komitmen yang dibuat pada aq, yang juga bukan yang saya inginkan.
sumber
Skenario:
Larutan
sumber