Pertanyaan Bagaimana cara mengganti cabang master di git, seluruhnya, dari cabang lain? [duplikat]


Kemungkinan Duplikat:
Ubah cabang saat ini menjadi master di git 

Saya memiliki dua cabang di git repo saya:

  1. menguasai
  2. seotweaks (dibuat awalnya dari master)

saya menciptakan seotweaks dengan maksud untuk segera menggabungkannya kembali masterNamun, itu 3 bulan yang lalu dan kode di cabang ini adalah 13 versi di depan master, secara efektif telah menjadi cabang master kerja kami karena semua kode masuk master lebih atau kurang usang sekarang.

Praktik yang sangat buruk yang saya tahu, pelajari.

Apakah Anda tahu bagaimana saya bisa mengganti semua isi master cabang dengan mereka seotweaks?

Saya hanya bisa menghapus semuanya master dan bergabung, tetapi ini tidak terasa seperti praktik terbaik.


1285
2018-05-19 03:06


asal


Jawaban:


Anda harus dapat menggunakan strategi gabungan "kita" untuk mengganti induk dengan seotweaks seperti ini:

git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks

Hasilnya harus menjadi tuan Anda sekarang dasarnya seotweaks.

(-s ours adalah kependekan dari --strategy=ours)

Dari dokumen tentang strategi 'kita':

Ini menyelesaikan sejumlah kepala, tetapi pohon yang dihasilkan dari penggabungan selalu dari kepala cabang saat ini, secara efektif mengabaikan semua perubahan dari semua cabang lainnya. Ini dimaksudkan untuk digunakan untuk menggantikan sejarah pembangunan cabang-cabang samping yang lama. Perhatikan bahwa ini berbeda dari opsi -Xours ke strategi gabungan rekursif.


2238
2018-05-19 04:51



Bagaimana dengan menggunakan git branch -m untuk mengganti nama cabang master ke yang lain, kemudian mengganti nama cabang seotweaks menjadi master? Sesuatu seperti ini:

git branch -m master old-master
git branch -m seotweaks master
git push -f origin master

Ini mungkin menghapus komit di master asal, periksa master asal Anda sebelum menjalankan git push -f origin master.


370
2018-05-19 03:11



Anda dapat mengganti nama / menghapus master pada remote, tetapi ini akan menjadi masalah jika banyak orang telah mendasarkan pekerjaan mereka pada cabang master jarak jauh dan telah menarik cabang tersebut di repo lokal mereka.
Itu tidak mungkin terjadi di sini karena semua orang tampaknya bekerja di cabang 'seotweaks'.

Dalam hal ini Anda dapat:
git remote --show mungkin tidak berfungsi. (Membuat git remote show untuk memeriksa bagaimana remote Anda dideklarasikan dalam repo lokal Anda. Saya akan menganggap 'origin')
(Mengenai GitHub, rumah9 komentar: "Saya harus melakukan satu langkah tambahan, klik 'Admintombol 'pada GitHub dan mengatur'Default Branch'untuk sesuatu selain'master', lalu kembalikan setelahnya ”)

git branch -m master master-old  # rename master on local
git push origin :master          # delete master on remote
git push origin master-old       # create master-old on remote
git checkout -b master seotweaks # create a new local master on top of seotweaks
git push origin master           # create master on remote

Tapi lagi:

  • jika pengguna lain mencoba untuk menarik sementara master dihapus pada remote, tarikan mereka akan gagal ("tidak ada referensi pada remote")
  • ketika master diciptakan kembali dari jarak jauh, tarikan akan mencoba untuk menggabungkan tuan baru itu pada tuan lokal (sekarang tua) mereka: banyak konflik. Mereka sebenarnya perlu reset --hard master lokal mereka ke cabang jarak jauh / master mereka akan mengambil, dan melupakan tuan mereka saat ini.

61
2018-05-19 03:57



sejak seotweaks awalnya dibuat sebagai cabang dari master, menggabungkannya kembali adalah ide yang bagus. namun jika Anda berada dalam situasi di mana salah satu cabang Anda tidak benar-benar cabang dari master atau riwayat Anda sangat berbeda sehingga Anda hanya ingin menghapuskan cabang master demi cabang baru yang telah Anda lakukan pada pekerjaan Anda dapat melakukan ini:

git push [-f] origin seotweaks:master

ini sangat membantu jika Anda mendapatkan kesalahan ini

! [remote rejected] master (deletion of the current branch prohibited)

dan Anda tidak menggunakan github dan tidak memiliki akses ke tab "Administrasi" untuk mengubah cabang default untuk repo jarak jauh Anda. lebih jauh lagi, ini tidak akan menyebabkan down time atau kondisi balapan seperti yang mungkin Anda temui dengan menghapus master:

git push origin :master

21
2017-07-25 20:44



Saya menemukan ini menjadi cara terbaik untuk melakukan ini (saya memiliki masalah dengan server saya tidak membiarkan saya menghapus)

Di server yang menginangi repositori asal, ketikkan yang berikut dari direktori di dalam repositori:

git config receive.denyDeleteCurrent ignore

Di stasiun kerja Anda:

git branch -m master vabandoned                 # rename master on local
git branch -m newBranch master                  # locally rename branch newBranch to master
git push origin :master                         # delete the remote's master
git push origin master:refs/heads/master        # push the new master to the remote
git push origin abandoned:refs/heads/abandoned  # push the old master to the remote

Kembali ke server yang menginangi repositori asal:

git config receive.denyDeleteCurrent true

kredit untuk penulis halaman ini

http://www.mslinn.com/blog/?p=772


1
2017-09-28 13:13