Saya memiliki repositori di Git. Saya membuat cabang, lalu melakukan beberapa perubahan baik untuk master dan ke cabang.
Kemudian, puluhan komitmen kemudian, saya sadari cabang itu dalam keadaan yang jauh lebih baik daripada tuannya, jadi saya ingin cabang itu "menjadi" tuan dan mengabaikan perubahan pada tuan.
Saya tidak dapat menggabungkannya, karena saya tidak ingin menyimpan perubahan pada master. Apa yang harus saya lakukan?
Ekstra : Dalam hal ini, master 'lama' telah push
-ed ke repositori lain seperti GitHub. Bagaimana ini mengubah banyak hal?
Jawaban:
Masalah dengan dua jawaban lainnya adalah bahwa master baru tidak memiliki master lama sebagai leluhur, jadi ketika Anda mendorongnya, semua orang akan menjadi kacau. Inilah yang ingin Anda lakukan:
Jika Anda ingin riwayat Anda menjadi sedikit lebih jelas, saya sarankan menambahkan beberapa informasi ke pesan gabungan gabung untuk memperjelas apa yang telah Anda lakukan. Ubah baris kedua menjadi:
sumber
--strategy=ours
berbeda dari--strategy=recursive -Xours
. Yaitu "milik kita" dapat menjadi strategi itu sendiri (hasilnya akan menjadi cabang saat ini tidak peduli apa), atau disahkan sebagai opsi untuk strategi "rekursif" (membawa perubahan cabang lain, dan secara otomatis lebih suka perubahan cabang saat ini ketika ada konflik ).git merge --strategy=ours master -m "new master"
agar bisa berfungsi.git push
benar setelah ini jika Anda ingin kode Anda didorong ke jarak jauh. Anda mungkin melihat peringatan sepertiYour branch is ahead of 'origin/master' by 50 commits.
ini diharapkan. Dorong saja! : DPastikan semuanya didorong ke repositori jarak jauh Anda (GitHub):
Timpa "master" dengan "better_branch":
Paksa dorongan ke repositori jarak jauh Anda:
sumber
git reset --hard origin/master
waktu berikutnya mereka ingin menarik, kalau tidak git akan mencoba untuk menggabungkan perubahan ke lokal mereka (sekarang) yang berbeda. Bahaya dari hal ini dijelaskan lebih lanjut dalam jawaban iniSunting: Anda tidak mengatakan Anda telah mendorong repo publik! Itu membuat dunia berbeda.
Ada dua cara, cara "kotor" dan cara "bersih". Misalkan cabang Anda bernama
new-master
. Ini cara bersih:Ini akan membuat file konfigurasi berubah agar cocok dengan cabang yang diganti nama.
Anda juga dapat melakukannya dengan cara yang kotor, yang tidak akan memperbarui file konfigurasi. Ini semacam apa yang terjadi di bawah tenda di atas ...
sumber
git branch old-master master; git branch -f master new-master
. Buat cabang cadangan segar, lalu langsung pindahkan master ke master baru. (Dan maaf karena salah mengeja nama Anda, perhatikan saja)Ubah nama cabang menjadi
master
dengan:sumber
git checkout master&&git reset --hard better_branch
?Dari apa yang saya mengerti, Anda bisa mem-branch-kan cabang saat ini menjadi cabang yang sudah ada. Intinya, ini akan menimpa
master
apa pun yang Anda miliki di cabang saat ini:Setelah Anda selesai melakukannya, Anda biasanya dapat mendorong
master
cabang lokal Anda , mungkin memerlukan parameter kekuatan di sini juga:Tidak ada penggabungan, tidak ada perintah yang panjang. Cukup
branch
danpush
- tapi, ya, ini akan menulis ulang sejarah darimaster
cabang, jadi jika Anda bekerja dalam tim Anda harus tahu apa yang Anda lakukan.Atau, saya menemukan bahwa Anda dapat mendorong cabang apa saja ke cabang jarak jauh mana pun, jadi:
sumber
Saya menemukan jawaban yang saya inginkan di posting blog. Ganti cabang master dengan cabang lain di git :
Ini pada dasarnya sama dengan jawaban Cascabel . Kecuali bahwa "opsi" tambahnya di bawah solusinya sudah tertanam di blok kode utama saya.
Lebih mudah untuk menemukan cara ini.
Saya menambahkan ini sebagai jawaban baru, karena jika saya memerlukan solusi ini nanti, saya ingin memiliki semua kode I saya akan gunakan dalam satu blok kode.
Kalau tidak, saya boleh salin-tempel, lalu baca detail di bawah untuk melihat baris yang seharusnya saya ubah - setelah saya menjalankannya.
sumber
Solusi yang diberikan di sini (mengganti nama cabang di 'master') tidak menekankan konsekuensi untuk repo jarak jauh (GitHub):
Jika orang lain sudah menarik repo Anda, mereka tidak akan dapat menarik sejarah master baru tanpa mengganti master mereka sendiri dengan cabang master GitHub baru (atau berurusan dengan banyak penggabungan).
Ada alternatif untuk push - force git untuk repo publik .
Jawaban Jefromi (menggabungkan perubahan yang tepat kembali ke master asli) adalah salah satunya.
sumber
Saya menemukan metode sederhana ini bekerja yang terbaik. Itu tidak menulis ulang sejarah dan semua check-in cabang sebelumnya akan ditambahkan ke master. Tidak ada yang hilang, dan Anda dapat dengan jelas melihat apa yang terjadi di log komit.
Tujuan: Membuat status "cabang" "master" saat ini
Bekerja di cabang, komit dan dorong perubahan Anda untuk memastikan repositori lokal dan jauh Anda mutakhir:
Setelah ini, master Anda akan menjadi kondisi pasti dari komit cabang terakhir Anda dan log komit master Anda akan menampilkan semua lapor-masuk cabang.
sumber
Satu juga dapat checkout semua file dari cabang lain ke master:
dan kemudian komit semua perubahan.
sumber
Untuk menambahkan jawaban Jefromi, jika Anda tidak ingin menempatkan penggabungan yang tidak berarti dalam sejarah
source
cabang, Anda bisa membuat cabang sementara untukours
penggabungan, lalu membuangnya:Dengan begitu komit gabungan hanya akan ada dalam sejarah
target
cabang.Atau, jika Anda tidak ingin membuat penggabungan sama sekali, Anda bisa mengambil konten
source
dan menggunakannya untuk komit baru ditarget
:sumber
Bagi saya, saya ingin iblis saya kembali ke tuan setelah itu di depan.
Saat berkembang:
sumber
Cara saya melakukan sesuatu adalah sebagai berikut
sumber
Jika Anda menggunakan eGit di Eclipse :
sumber
Langkah-langkah berikut dilakukan di browser Git yang didukung oleh Atlassian (server Bitbucket)
Jadikan {current-branch} sebagai
master
master
dan beri nama "master-duplikat".sumber