Saya baru mengenal Git, dan sekarang saya dalam situasi ini:
- Saya memiliki empat cabang (master, b1, b2, dan b3).
- Setelah saya bekerja pada b1-b3, saya menyadari bahwa saya memiliki sesuatu untuk diubah pada master cabang yang seharusnya ada di semua cabang lainnya.
- Saya mengubah apa yang saya butuhkan
master
dan ... ini masalah saya:
Bagaimana cara memperbarui semua cabang lainnya dengan master
kode cabang?
git
git-branch
Ionuț Staicu
sumber
sumber
Jawaban:
Anda memiliki dua opsi:
Yang pertama adalah penggabungan, tetapi ini menciptakan komit tambahan untuk penggabungan.
Periksa setiap cabang:
Kemudian gabungkan:
Kemudian dorong:
Atau, Anda dapat melakukan rebase:
sumber
got push origin master
... tidak masuk akal. Anda tidak mengubah cabang utama. Saya pikir itu adalah kesalahan dengan 119 upvote: /git rebase master
adalah jawaban yang benarPada dasarnya Anda memiliki dua opsi:
Anda bergabung. Itu sebenarnya cukup sederhana, dan operasi lokal yang sempurna:
Ini meninggalkan sejarah persis seperti yang terjadi: Anda bercabang dari master, Anda membuat perubahan pada semua cabang, dan akhirnya Anda memasukkan perubahan dari master ke ketiga cabang.
git
dapat menangani situasi ini dengan sangat baik, ini dirancang untuk penggabungan yang terjadi di semua arah, pada saat yang sama. Anda dapat mempercayainya untuk dapat menyatukan semua utas dengan benar. Ini sama sekali tidak peduli apakahb1
penggabungan cabangmaster
, ataumaster
gabunganb1
, komit gabungan terlihat sama saja dengan git. Satu-satunya perbedaan adalah, cabang mana yang menunjuk komit gabungan ini.Anda rebase. Orang-orang dengan SVN, atau latar belakang yang serupa merasa ini lebih intuitif. Perintahnya analog dengan kasus gabungan:
Orang-orang menyukai pendekatan ini karena mempertahankan sejarah linier di semua cabang. Namun, sejarah linier ini bohong, dan Anda harus sadar bahwa itu benar. Pertimbangkan grafik komit ini:
Penggabungan menghasilkan sejarah sebenarnya:
Namun, rebase memberi Anda sejarah ini:
Intinya adalah, bahwa komit
E'
,F'
danG'
tidak pernah benar-benar ada, dan memiliki kemungkinan pernah diuji. Mereka bahkan tidak dapat dikompilasi. Sebenarnya cukup mudah untuk membuat komitmen yang tidak masuk akal melalui rebase, terutama ketika perubahanmaster
penting untuk pengembangan dib1
.Konsekuensi dari ini mungkin, bahwa Anda tidak bisa membedakan yang mana dari tiga komit
E
,F
danG
benar-benar memperkenalkan kemunduran, mengurangi nilaigit bisect
.Saya tidak mengatakan bahwa Anda tidak boleh menggunakannya
git rebase
. Ini memiliki kegunaannya. Tetapi setiap kali Anda menggunakannya, Anda harus menyadari fakta bahwa Anda berbohong tentang sejarah. Dan Anda setidaknya harus mengkompilasi menguji komitmen baru.sumber
git checkout <source branch>
git pull
. Kemudian melanjutkan dengan di atas:git checkout b1
...git merge
dangit rebase
. Tidak ada cara untuk menghindarinya.git rebase
memiliki keuntungan untuk memungkinkan Anda menyembunyikan beberapa tahap rebasing (yaitu rebasing cabang yang sama ke beberapa komitmen yang berbeda secara berurutan untuk mengurangi jumlah konflik di setiap tahap). Namun demikian, fakta bahwa rebase berbohong tentang sejarah membuatnya jauh lebih mudah untuk mendapatkan yang baik dalam rebase bertingkat banyak ... Itu sebabnya saya selalu lebih suka penggabungan, bahkan ketika itu berarti saya harus mengacaukan sejarah dengan beberapa komitmen penggabungan. .git rebase master
adalah cara yang tepat untuk melakukan ini. Penggabungan akan berarti komit akan dibuat untuk penggabungan, sedangkan rebasing tidak.sumber
Jika Anda sedang mengerjakan dan mematikan cabang, atau banyak yang telah terjadi di cabang lain saat Anda sedang mengerjakan sesuatu, yang terbaik adalah mengubah cabang Anda menjadi master. Ini membuat sejarah tetap rapi dan membuat banyak hal lebih mudah untuk diikuti.
Catatan:
Ada bab tentang rebasing di http://git-scm.com/book/ch3-6.html , dan banyak sumber daya lain di web.
sumber
@ cmaster membuat jawaban terinci terbaik. Secara singkat:
Anda seharusnya tidak menulis ulang sejarah cabang alih-alih menyimpannya dalam keadaan aktual untuk referensi di masa mendatang. Sementara bergabung untuk menguasai, itu menciptakan satu komit ekstra tapi itu murah. Komitmen tidak dikenakan biaya.
sumber
Untuk memperbarui cabang lain seperti (cadangan) dengan salinan cabang utama Anda. Anda dapat mengikuti salah satu cara (rebase atau gabung) ...
Gabungkan cabang (akan ada komit tambahan secara otomatis ke cabang cadangan).
Catatan: Rebase tidak lain adalah membuat basis baru (salinan baru)
(Ulangi untuk cabang lain jika ada seperti backup2 & dll ..,)
(Ulangi untuk cabang lain jika ada seperti backup2 & dll ..,)
sumber
Anda dapat menggabungkan, atau menerapkan komit individual di seluruh cabang dengan menggunakan git-pick ceri .
sumber
Ada dua opsi untuk masalah ini.
1) git rebase
2) git bergabung
Hanya berbeda dengan di atas keduanya dalam kasus penggabungan, akan memiliki komit ekstra dalam sejarah
1) cabang checkout git (b1, b2, b3)
2) git rebase asal / master (Dalam kasus konflik diselesaikan secara lokal dengan melakukan git rebase --continue)
3) git push
Atau, opsi git merge juga mirip
1) git checkout "your_branch" (b1, b2, b3)
2) git merge master
3) git push
sumber
untuk memperbarui cabang Anda dari master:
sumber