I'm baru untuk Git, dan sekarang saya'm dalam situasi ini:
master
dan... di sini adalah masalah saya:Bagaimana cara memperbarui semua cabang-cabang lain dengan master
kode cabang?
Anda memiliki dua pilihan:
Yang pertama adalah menggabungkan, tapi hal ini menciptakan tambahan untuk melakukan penggabungan.
Checkout masing-masing cabang:
git checkout b1
Kemudian menggabungkan:
git merge origin/master
Kemudian push:
git push origin b1
Sebagai alternatif, anda dapat melakukan rebase:
git fetch
git rebase origin/master
Anda pada dasarnya memiliki dua pilihan:
git checkout b1 git merge master
Ini meninggalkan sejarah yang sebenarnya terjadi: Anda bercabang dari master, anda membuat perubahan ke semua cabang, dan akhirnya anda memasukkan perubahan dari master ke semua tiga cabang.
git
dapat menangani situasi ini dengan sangat baik, hal ini dirancang untuk menyatu terjadi di semua arah, di waktu yang sama. Yang dapat anda percaya itu akan bisa mendapatkan semua benang-benang yang bersama-sama dengan benar. Itu hanya tidak peduli apakah cabang b1
menyatu master
, atau master
menyatu b1
, gabungan melakukan terlihat semua sama untuk git. Satu-satunya perbedaan adalah, cabang yang akhirnya menunjuk ke ini menggabungkan melakukan.
git checkout b1 git rebase master
Orang-orang menyukai pendekatan ini karena mempertahankan linear sejarah di semua cabang. Namun, ini linear sejarah adalah sebuah kebohongan, dan anda harus menyadari bahwa itu adalah. Pertimbangkan ini melakukan graph:
A --- B --- C --- D <-- master \ -- E --- F --- G <-- b1
Hasil gabungan dalam sejarah yang benar:
A --- B --- C --- D <-- master \ \ -- E --- F --- G-H <-- b1
Yang rebase, namun, memberikan anda sejarah ini:
A --- B --- C --- D <-- master \ -- E' --- F' --- G' <-- b1
Intinya adalah, bahwa melakukan E'
, F'
, dan G'
tidak pernah benar-benar ada, dan mungkin tidak pernah diuji. Mereka bahkan mungkin tidak mengkompilasi. Hal ini sebenarnya cukup mudah untuk membuat tidak masuk akal melakukan melalui rebase, terutama ketika perubahan di master
yang penting untuk pembangunan di b1
.
Konsekuensi dari hal ini mungkin, bahwa anda dapat't membedakan yang mana dari tiga melakukan E
, F
, dan G
benar-benar diperkenalkan regresi, mengurangi nilai git membagi dua
.
Saya tidak mengatakan bahwa anda tidak't menggunakan git rebase`. Itu memiliki kegunaan. Tapi setiap kali anda menggunakannya, anda harus menyadari fakta bahwa anda berbohong tentang sejarah. Dan anda setidaknya harus menyusun tes yang baru melakukan.
git rebase master
adalah cara yang tepat untuk melakukan hal ini. Penggabungan akan berarti komit akan dibuat untuk bergabung, sementara rebasing tidak akan.
Jika anda've telah bekerja pada sebuah cabang on-dan-off, atau banyak yang telah terjadi di cabang-cabang lain sementara anda've telah bekerja pada sesuatu, itu's terbaik untuk rebase cabang anda ke master. Hal ini membuat sejarah rapi dan membuat banyak hal lebih mudah untuk mengikuti.
git checkout master
git pull
git checkout local_branch_name
git rebase master
git push --force # force required if you've already pushed
Catatan:
Ada's bab pada rebasing di http://git-scm.com/book/ch3-6.html, dan banyak sumber daya lain di luar sana di web.
@cmaster membuat yang terbaik diuraikan jawabannya. Secara singkat:
git checkout master #
git pull # update local master from remote master
git checkout <your_branch>
git merge master # solve merge conflicts if you have`
Anda tidak harus menulis ulang cabang sejarah bukan menjaga mereka dalam keadaan yang sebenarnya untuk referensi di masa depan. Sementara penggabungan untuk menguasai, menciptakan satu ekstra melakukan tetapi yang lebih murah. Melakukan tidak dikenakan biaya.
Untuk memperbarui cabang-cabang lain seperti (backup) dengan cabang master copy. Anda dapat mengikuti cara yang baik (rebase atau gabungan)...
Catatan : Rebase adalah apa-apa tetapi membangun basis baru (a new copy)
git checkout cadangan git merge master git push
(Ulangi untuk cabang lainnya jika ada seperti backup2 & dll.,)
git checkout cadangan git rebase master git push
(Ulangi untuk cabang lainnya jika ada seperti backup2 & dll.,)
Anda dapat menggabungkan, atau anda dapat menerapkan individu melakukan seluruh cabang dengan menggunakan git cherry-pick.
Ada dua pilihan untuk masalah ini.
git rebase
git merge
Hanya perbedaan dengan di atas baik dalam hal penggabungan, akan memiliki tambahan komit dalam sejarah
git checkout cabang(b1,b2,b3)
git rebase asal/induk (Dalam hal menyelesaikan konflik secara lokal dengan melakukan git rebase --terus)
git push
Atau, git merge opsi ini mirip fashion
git checkout "your_branch"(b1,b2,b3)
git merge master
git push