Cara mengganti master branch di Git, seluruhnya, dari cabang lain?

Saya memiliki dua cabang di repositori Git:

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

Aku menciptakan seotweaks dengan maksud cepat penggabungan kembali menjadi master. Namun, itu tiga bulan yang lalu dan kode di cabang ini adalah versi 13 ke depan dari master.

Hal ini telah secara efektif menjadi kerja kami sebagai cabang master semua kode di master lebih atau kurang usang sekarang.

Sangat buruk praktek yang saya tahu, pelajaran yang dipelajari.

Apakah anda tahu bagaimana saya dapat mengganti semua isi dari master cabang dengan orang-orang di seotweaks?

Aku hanya bisa menghapus segala sesuatu di master dan bergabung, tapi ini tidak merasa seperti praktek terbaik.

Mengomentari pertanyaan (6)
Larutan

Anda harus mampu menggunakan "kita" menggabungkan strategi untuk menimpa guru dengan seotweaks seperti ini:

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

Hasilnya harus anda master adalah sekarang pada dasarnya seotweaks.

(-s milik kita adalah singkatan dari --strategi=ours)

Dari docs tentang 'kita' strategi:

Ini memecahkan sejumlah kepala, tetapi pohon yang dihasilkan dari penggabungan selalu bahwa saat ini kepala cabang, efektif mengabaikan semua perubahan dari semua cabang-cabang lain. Hal ini dimaksudkan untuk digunakan untuk menggantikan tua sejarah perkembangan dari sisi cabang-cabang. Perhatikan bahwa ini berbeda dari -Xours pilihan untuk rekursif merge strategi.

Update dari komentar: Jika anda mendapatkan fatal: menolak untuk menggabungkan terkait sejarah, maka perubahan kedua baris ini: git merge --izinkan-terkait-sejarah -s kita master

Komentar (39)

Bagaimana menggunakan git branch -m untuk mengubah nama cabang utama untuk satu sama lain, maka nama seotweaks cabang untuk menguasai? Sesuatu seperti ini:

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

Ini akan menghapus melakukan origin master, silahkan cek asal guru sebelum menjalankan git push-f origin master`.

Komentar (16)

Anda dapat mengubah nama/menghapus guru di daerah terpencil, tetapi ini akan menjadi masalah jika banyak orang telah berdasarkan pekerjaan mereka pada remote cabang master dan telah menarik bahwa cabang di repo lokal. Yang mungkin tidak akan terjadi di sini karena semua orang tampaknya untuk dapat bekerja pada cabang 'seotweaks'.

Dalam hal ini anda dapat: git remote --show mungkin tidak bekerja. (Membuat git remote show untuk memeriksa seberapa jauh anda dinyatakan dalam repo lokal. Saya akan berasumsi 'asal') (Tentang GitHub, house9 komentar: "saya harus melakukan satu langkah tambahan, klik 'Admin' tombol di GitHub dan mengatur 'Default Cabang' ke sesuatu yang lain dari 'master', kemudian meletakkannya kembali setelah itu")

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-lagi:

  • jika pengguna mencoba untuk menarik para master dihapus pada remote, mereka menarik akan gagal ("tidak ada wasit di remote")
  • ketika master diciptakan pada remote, yang menarik akan mencoba untuk menggabungkan yang baru master di lokal mereka (saat tua) master: banyak konflik. Mereka benar-benar perlu untuk me-reset --hard mereka master lokal ke remote/master cabang mereka akan mengambil, dan melupakan mereka saat ini master.
Komentar (6)

Sejak seotweaks awalnya diciptakan sebagai sebuah cabang dari master, penggabungan kembali adalah ide yang baik. Namun jika anda berada dalam situasi di mana salah satu dari cabang-cabang anda tidak benar-benar sebuah cabang dari master atau sejarah anda begitu berbeda bahwa anda hanya ingin melenyapkan master cabang demi cabang yang baru anda've telah melakukan pekerjaan anda dapat melakukan hal ini:

git push [-f] origin seotweaks:master

Hal ini sangat membantu jika anda mendapatkan kesalahan ini:

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

Dan anda tidak menggunakan GitHub dan don't memiliki akses ke "Administrasi" tab untuk mengubah default cabang untuk remote repositori. Selain itu, ini tidak't menyebabkan down time atau ras kondisi seperti yang anda mungkin mengalami dengan menghapus master:

git push origin :master
Komentar (4)

Saya menemukan ini menjadi cara terbaik untuk melakukan ini (aku punya masalah dengan server saya tidak membiarkan saya hapus).

Pada server yang host asal repositori, ketik berikut dari sebuah direktori dalam repositori:

git config receive.denyDeleteCurrent ignore

Pada workstation 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 pada server yang host asal repositori:

git config receive.denyDeleteCurrent true

Kredit untuk penulis blog post http://www.mslinn.com/blog/?p=772

Komentar (3)