Bagaimana cara mengganti nama cabang 'master' Git saya menjadi 'rilis'?

115

Kami ingin memberlakukan kebijakan baru untuk proyek kami yang cabang master sekarang disebut cabang rilis untuk memastikan lebih jelas tentang bagaimana cabang harus digunakan. Tentunya, kami juga akan mengembangkan dan melepas calon cabang.

Saya mengerti bahwa saya dapat mengganti nama cabang master secara lokal hanya dengan menggunakan berikut ini:

git branch -m master release

Namun, itu hanya secara lokal. Bahkan jika saya mendorong ini ke remote, HEAD masih mengarah ke cabang master jarak jauh. Saya ingin menyingkirkan cabang master sepenuhnya dan membuat cabang lokal default pada klon awal, menjadi rilis.

Bagaimana saya bisa mencapai ini?

Tampaknya karena asalnya ada di server Gitorious , saya mendapatkan kesalahan saat menghapus cabang master. Saya mencoba untuk melihat sekarang apakah mungkin untuk mengubah ini sehingga cabang default adalah 'rilis'.

Kyle Hayes
sumber
2
Heh, cukup adil. Nilai jangka panjang cukup tinggi untuk setidaknya mencoba.
Kyle Hayes
Kemungkinan duplikat dari Bagaimana cara mengganti nama cabang Git lokal?
Vineet Jain
Beberapa server (jarak jauh) menolak untuk menghapus cabang "default" (ini kasus dengan Github). Jadi Anda mungkin perlu pergi ke server untuk memilih cabang "default" lain untuk waktu operasi ... Di Github, ini dapat dilakukan di tampilan "cabang".
jehon
1
git branchsekarang mendukung --movebendera git-scm.com/docs/git-branch#Documentation/git-branch.txt---move
alxndr

Jawaban:

139
git checkout -b release master    # Create and switch to the release branch
git push -u origin release        # Push the release branch to the remote and track it
git branch -d master              # Delete local master
git push --delete origin master   # Delete remote master
git remote prune origin           # Delete the remote tracking branch

Harap diperhatikan, jika Anda menggunakan GitHub, Anda harus terlebih dahulu mengubah cabang "default" Anda di GitHub setelah langkah 3:

Di repositori Anda di github.com, buka PengaturanCabangCabang Default . Ubah untuk melepaskan lalu lakukan langkah-langkah selanjutnya.

Adam Dymitruk
sumber
3
Ketika saya mencoba git push --delete, saya mendapatkan error berikut: penghapusan cabang saat ini dilarang
Kyle Hayes
8
Anda menggunakan github atau yang serupa, Anda perlu membuat cabang default menjadi sesuatu yang lain: matthew-brett.github.com/pydagogue/gh_delete_master.html atau tinggalkan master di sana dan abaikan.
Adam Dymitruk
Ya, kami memiliki contoh yang mengerikan. Biarkan saya melihat apakah itu pilihan.
Kyle Hayes
Sepertinya 'kait komit yang kejam melarang penghapusan cabang master - tanpa alasan bagus yang dapat saya lihat: /
fge
1
Hal yang sama ! [remote rejected] branch (deletion of the current branch prohibited) akan terjadi dengan Bitbucket. Ganti "Repositori Utama 'di layar pengaturan (di bawah ikon roda gigi).
dnfehren
13

Lihat cabang master Anda

git checkout master

Buat cabang rilis Anda dan alihkan ke:

git branch release
git checkout release

Dorong itu ke server

git push origin release

Hapus referensi cabang master di server

git push origin :master

Hapus cabang master lokal

git branch -d master
Jeff Ferland
sumber
2
Saya dapat mengetahui dengan langkah-langkah ini saya akan mengalami kesalahan yang sama seperti yang saya sebutkan di atas.
Kyle Hayes
@KHHes Itu adalah masalah konfigurasi server. Meskipun demikian secara default, proses untuk mengubahnya harus terlihat oleh pengguna atau dapat ditemukan dengan mudah di Stackoverflow
Jeff Ferland
Anda harus beralih ke cabang lain sebelum Anda dapat menghapus satu cabang.
Mulai berlaku
5

Catatan: Jawaban ini ditujukan untuk server Git yang dihosting sendiri di mana Anda memiliki akses baris perintah.

Karena mencoba menghapus remote masterdari klien memang tidak diperbolehkan dan saya menganggap larangan itu denyDeleteCurrentmasuk akal, saya tidak ingin mengubah pengaturan itu.

Namun, saya menemukan bahwa cara termudah untuk mengganti nama master Anda jika Anda memiliki akses baris perintah ke server jarak jauh adalah dengan menjalankan perintah ganti nama secara langsung di jarak jauh.

Ini berhasil untuk saya:

  1. Masuk melalui SSH ke server git jarak jauh
  2. Buka folder xxx.git proyek Anda
  3. Lari: git branch -m master release

Sekarang repositori jarak jauh digunakan releasesebagai cabang defaultnya dan setiap git clonedi repositori itu dari klien mana pun akan memeriksa cabang rilis secara default.

Ini juga sangat membantu setelah menyiapkan repositori kosong untuk mengkonfigurasinya sesuai kebutuhan Anda.

Christopher Lörken
sumber
3

Seperti yang dinyatakan sebelumnya oleh orang lain, masalah di sini adalah Gitorious, yang tidak memungkinkan Anda menghapus cabang HEAD secara default. Anda memiliki dua pilihan untuk mengatasi masalah ini. Salah satunya adalah masuk ke server Gitorious (dengan ssh), temukan repositori Git di server file dan tambahkan:

[receive]
        denyDeleteCurrent = warn

ke konfigurasi.

Pilihan yang lebih mudah adalah dengan mengubah cabang default. Masuk ke repositori Anda di antarmuka web Gitorious, tekan "Edit repositori", dan setel "Head Ubah referensi simbolik HEAD di repositori Git mengarah ke:". Setelah Anda melakukan ini, Anda dapat menghapus cabang master.

Aleksander Blomskøld
sumber
2

Jika Anda mengalami masalah ini dengan GitHub , lakukan langkah-langkah hingga menghapus cabang dari jarak jauh. Itu tidak akan membiarkan Anda melakukan itu. Kemudian masuk ke antarmuka Web dan pada repositori buka PengaturanCabangCabang Default . Ubah ke cabang baru dan lakukan langkah selanjutnya.

Gru
sumber
1

Idealnya, Anda ingin menyiapkan pelacakan, jadi lakukan ini:

git push origin HEAD:release
git checkout --track origin/release

Sekarang, apakah Anda ingin menghapus yang lain?

git branch -d master
git push origin :master

Sederhana!

gahooa
sumber
Saya mendapatkan kesalahan yang sama dengan yang saya posting di komentar @ Adam ketika saya mendapatkan perintah git push origin: master.
Kyle Hayes
0

Karena Anda sudah selesai mengganti nama cabang, untuk mengatur HEAD ke releaseremote

git remote set-head origin release

Kemudian untuk menghapus mastercabang secara remote, Anda harus menjadi administrator, setidaknya di GitHub. Silakan lihat posting ini untuk informasi lebih lanjut.

zyy
sumber