pengembangan-web-mp-pd.com

Bagaimana cara mengganti cabang master di Git, seluruhnya, dari cabang lain?

Kemungkinan Duplikat:
Jadikan cabang Git saat ini cabang utama

Saya memiliki dua cabang di repositori Git saya:

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

Saya membuat seotweaks dengan maksud untuk segera menggabungkannya kembali ke master. Namun, itu tiga bulan lalu dan kode di cabang ini adalah 13 versi di depan master.

Ini telah secara efektif menjadi cabang master kami yang berfungsi karena semua kode di master kurang lebih sudah usang sekarang.

Praktek yang sangat buruk, saya tahu, pelajaran yang didapat.

Apakah Anda tahu bagaimana saya bisa mengganti semua konten dari cabang master dengan yang ada di seotweaks?

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

1443
Jason

Anda harus dapat menggunakan strategi gabungan "milik kami" untuk menimpa master dengan seotweaks seperti ini:

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

Hasilnya seharusnya tuanmu sekarang dasarnya seotweaks.

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

Dari dokumen tentang strategi 'milik kita':

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

2493
ergosys

Bagaimana dengan menggunakan git branch -m untuk mengubah nama cabang master menjadi yang lain, lalu 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 , silakan periksa master Asal Anda sebelum menjalankan git Push -f Origin master.

421
ZelluX

Anda bisa mengganti nama/menghapus master pada remote, tetapi ini akan menjadi masalah jika banyak orang mendasarkan pekerjaan mereka pada cabang master jarak jauh dan telah menarik cabang itu di repo lokal mereka.
Mungkin bukan itu yang terjadi di sini karena semua orang tampaknya mengerjakan cabang 'seotweaks'.

Dalam hal ini Anda dapat:
git remote --show mungkin tidak berfungsi. (Buat git remote show untuk memeriksa bagaimana remote Anda dideklarasikan dalam repo lokal Anda. Saya akan menganggap 'Origin')
(Mengenai GitHub, house9 komentar: "Saya harus melakukan satu langkah tambahan, klik tombol 'Admin' pada GitHub dan atur 'Default Branch' ke sesuatu selain 'master', lalu tulis kembali sesudahnya ")

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 menarik ketika master dihapus pada jarak jauh, tarikan mereka akan gagal ("tidak ada referensi seperti itu di remote")
  • ketika master dibuat ulang pada jarak jauh, tarikan akan mencoba untuk menggabungkan master baru itu pada master lokal mereka (yang sudah lama): banyak konflik. Mereka benar-benar perlu reset --hard master lokal mereka ke remote/cabang master yang akan mereka ambil, dan melupakan master mereka saat ini.
70
VonC

Karena 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 bukan benar-benar cabang dari master atau sejarah Anda sangat berbeda sehingga Anda hanya ingin menghapuskan master cabang demi cabang baru yang telah Anda kerjakan pada 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 repositori jarak jauh Anda. Selain itu, ini tidak akan menyebabkan waktu tunda atau kondisi balapan karena Anda mungkin akan bertemu dengan menghapus master:

git Push Origin :master
24
mholm815

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

Di server yang menampung repositori Origin, ketikkan yang berikut dari direktori di dalam repositori:

git config receive.denyDeleteCurrent ignore

Di 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 ke server yang menampung repositori Origin:

git config receive.denyDeleteCurrent true

Penghargaan kepada penulis posting blog http://www.mslinn.com/blog/?p=772

2
ScottGuymer