Ganti nama cabang di git

103

Mungkin ada lebih dari satu cara untuk mengajukan pertanyaan ini, jadi berikut ini uraian masalahnya. Saya sedang mengerjakan master dan melakukan beberapa hal dan kemudian memutuskan untuk menunda pekerjaan itu. Saya membuat cadangan beberapa komitmen dan kemudian bercabang dari sebelum saya memulai pekerjaan omong kosong saya. Praktis ini berfungsi dengan baik, saya baru saja memiliki cabang yang berbeda sebagai cabang pengembangan utama saya. Saya bertanya-tanya bagaimana saya bisa mengubah banyak hal jadi saya mengerjakan master lagi tetapi tidak ada pekerjaan sampah saya dan mengatakan pekerjaan ada di cabang yang berbeda.

Beberapa cara ini dapat ditanyakan / diselesaikan: Bagaimana cara mengganti nama cabang master saya menjadi yang lain dan kemudian mengganti nama yang lain menjadi master? Bagaimana cara mencadangkan master dan kemudian menyebabkan semua komitmen yang telah saya buat cadangannya berada di cabang yang berbeda?

Terima kasih atas semua jawaban (cepat)! Semuanya baik-baik saja.

Daniel Benamy
sumber

Jawaban:

144

Selain komentar lain, Anda mungkin menemukan tombol -m (pindah) ke git-branch membantu. Anda dapat mengganti nama master lama Anda menjadi yang lain, lalu mengganti nama cabang baru Anda menjadi master:

git branch -m master crap_work
git branch -m previous_master master
Greg Hewgill
sumber
Bergantung pada alur kerja Anda, Anda mungkin juga ingin mengubah referensi cabang apa pun di .git / config. Saya mengubah [branch "crap_work"]untuk membaca [branch "master"]sehingga master masih sinkron dengan origin/master. Tentu saja, keadaan kedua repo tersebut masih masuk akal.
Eponymous
3
Ini tidak mengganti nama cabang di repo jarak jauh, hanya di repo lokal.
smohadjer
1
@smohadjer Untuk mengganti nama remote, Anda harus melakukan git push -uf origin masterdan git push -u origin crap_work.
zyy
31

Saya pikir Anda harus mempertimbangkan strategi pengembangan yang berbeda untuk mencegah masalah seperti ini. Salah satu yang tampaknya paling berhasil bagi saya adalah tidak pernah melakukan pengembangan secara langsung di cabang master saya. Terlepas dari perubahan yang saya buat, saya selalu membuat cabang baru untuk kode baru:

git checkout -b topic / topic_name master

Dari sana, saya dapat menerapkan perubahan ke repositori publik:

git push pu topic / topic_name

atau akhirnya hanya menggabungkannya kembali dengan cabang master saya:

git checkout master && git merge topic / topic_name

Jika Anda benar-benar perlu kembali ke titik waktu yang lebih lama dan menetapkannya sebagai master Anda, Anda dapat mengganti nama cabang saat ini menjadi yang lain dan kemudian memeriksa versi yang lebih lama untuk menjadi master Anda:

 git branch -m master junk
 git co -b master old_sha1_value
Brian Riehman
sumber
Itu kebijakan yang bagus. Dan kalau dipikir-pikir, saya telah melihat itu dipraktikkan di tempat lain. Terima kasih.
Rimian
14

Mulai master, buat cabang yang dipanggil in-progress, lalu setel ulang masterke komit sebelumnya.

$ git branch in-progress
$ git reset --hard HEAD^
Ted Percival
sumber
1
Saya tidak melihat alasan untuk ini ditolak. Saya melakukannya sendiri beberapa kali, sebelum saya belajar tentang branch -m dan menyadari bahwa master tidak terikat secara permanen sebagai nama permanen dari sebuah branch.
skiphoppy
7

Ini relatif mudah:

git checkout -b fake_master master # fake_master now points to the same commit as master
git branch -D master               # get rid of incorrect master
git checkout -b master real_master # master now points to your actual master
git checkout master                # optional -- switch on to your master branch
olliej.dll
sumber
1
Ya, yang terakhir sepenuhnya opsional - git checkout -bmembuat cabang dan membuatnya aktif.
BorisOkunskiy
0

Ini akan mengatur master Anda ke titik mana pun dalam satu langkah:

git checkout -B master new_point
Penghe Geng
sumber