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.

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

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

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^

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.