Bagaimana cara saya mengganti nama cabang Git lokal?

Jawaban:

13739

Jika Anda ingin mengganti nama cabang sambil menunjuk ke cabang apa pun, lakukan:

git branch -m <oldname> <newname>

Jika Anda ingin mengganti nama cabang saat ini, Anda dapat melakukan:

git branch -m <newname>

Cara untuk mengingat ini adalah -muntuk "memindahkan" (atau mv), yang merupakan cara Anda mengganti nama file. Menambahkan alias juga bisa membantu. Untuk melakukannya, jalankan yang berikut:

git config --global alias.rename 'branch -m'

Jika Anda menggunakan Windows atau sistem file case-insensitive lainnya, dan hanya ada perubahan kapitalisasi pada nama, Anda perlu menggunakan -M, jika tidak, git akan membuang cabang yang sudah ada kesalahan:

git branch -M <newname>
siride
sumber
87
Yang benar-benar ingin saya ketahui adalah apakah ini akan berpengaruh pada cabang jarak jauh ketika / jika Anda mendorong
PandaWood
181
@ PandaWood: itu akan menambah cabang baru saat Anda menekan, tetapi tidak akan menghapus cabang lama. Jika Anda menggunakan git push -f --mirror, maka itu akan mengubah nama cabang pada remote, tetapi Anda hanya harus menggunakan metode ini jika remote hanya menjadi salinan repositori Anda saat ini. Lihat juga pertanyaan ini: stackoverflow.com/questions/1526794/git-rename-remote-branch
siride
19
@ PandaWood, itu tergantung pada bagaimana push.defaultdikonfigurasi. Secara default ( matching) itu akan mendorong ke remote yang namanya cocok. Anda harus melakukan git push origin <newname>:<oldname>atau Anda akan membuat cabang jarak jauh baru. Namun, jika push.defaultdiatur ke upstream, maka Anda bisa push origin headdan semuanya akan pergi ke oldname di remote.
Erin Stanfill
13
@ NightOwl888: -m mungkin adalah kependekan dari "move", mengikuti konvensi Unix untuk menggunakan mvuntuk mengganti nama file. Alasan untuk ini adalah bahwa pemindahan dan penggantian nama, dalam sistem file inode berbasis direktori, sepenuhnya sama.
siride
51
Nama panjang -mopsi adalah --move, misalnya, git branch --move mastermengubah nama cabang saat ini untuk disebut "master".
robenkleene
445
git branch -m old_branch_name new_branch_name

Perintah di atas akan mengubah nama cabang Anda, tetapi Anda harus sangat berhati-hati menggunakan cabang yang diganti nama, karena masih akan merujuk ke cabang hulu lama yang terkait dengannya, jika ada.

Jika Anda ingin mendorong beberapa perubahan menjadi master setelah cabang lokal Anda diubah namanya menjadi new_branch_name (nama contoh):

git push origin new_branch_name:master (sekarang perubahan akan pergi ke cabang master tetapi nama cabang lokal Anda adalah new_branch_name)

Untuk detail lebih lanjut, lihat " Cara mengganti nama nama cabang lokal Anda di Git ."

Madhan Ayyasamy
sumber
326

Untuk mengganti nama cabang Anda saat ini:

git branch -m <newname>
Jonathan
sumber
159
Anda perlu menggunakan -M untuk mengganti nama jika Anda hanya mengubah kapitalisasi, karena git akan memberi tahu Anda bahwa cabang sudah ada.
cjspurgeon
289

Berikut langkah-langkah untuk mengganti nama cabang:

  1. Beralih ke cabang yang perlu diganti namanya
  2. git branch -m <new_name>
  3. git push origin :<old_name>
  4. git push origin <new_name>:refs/heads/<new_name>

EDIT (12/01/2017): Pastikan Anda menjalankan perintah git statusdan memeriksa bahwa cabang yang baru dibuat menunjuk ke ref sendiri dan bukan yang lebih lama. Jika Anda menemukan referensi ke cabang yang lebih tua, Anda harus membatalkan set upstream menggunakan:

git branch --unset-upstream
Milind Anantwar
sumber
1
Di langkah mana seseorang akan membatalkan upstream? Sebelum langkah 4?
Cyclonecode
1
Ini adalah jawaban terbaik di sini karena ini menjelaskan proses lengkap untuk menyelesaikan
penggantian
212

Ganti nama cabang akan berguna setelah cabang Anda selesai. Kemudian barang baru akan datang, dan Anda ingin berkembang di cabang yang sama alih-alih menghapusnya dan membuat yang baru.

Dari pengalaman saya, untuk mengganti nama cabang lokal dan jarak jauh di Git, Anda harus melakukan langkah-langkah berikut.

Mengutip dari Banyak Negara - Mengganti nama cabang lokal dan jarak jauh di git

1. Ganti nama cabang lokal Anda

Jika Anda berada di cabang yang ingin Anda ganti namanya:

git branch -m new-name

Jika Anda berada di cabang yang berbeda:

git branch -m old-name new-name

2. Hapus cabang jarak jauh nama lama dan dorong cabang lokal nama baru

git push origin :old-name new-name

3. Setel ulang cabang upstream untuk cabang lokal nama baru

git push origin -u new-name
trungk18
sumber
1
Yang ini bekerja lebih baik untuk saya. Di sini 2 langkah memberi saya kesalahan berikut:error: dst ref refs/heads/<old-name> receives from more than one src.; error: failed to push some refs to 'git@uri:foo/bar.git'
Anto
1
Anda mendapat masalah saat menjalankan perintah, git push origin :old-name new-namekan?
trungk18
Yap persis (maaf saya maksudkan "langkah ke-2", bukan "2 langkah" - lelah)
Anto
116

Jawabannya sejauh ini benar, tetapi di sini ada beberapa informasi tambahan:

Seseorang dapat dengan aman mengganti nama cabang dengan '-m' (bergerak), tetapi kita harus berhati-hati dengan '-M', karena itu memaksa nama tersebut, bahkan jika ada cabang yang sudah ada dengan nama yang sama sudah. Berikut adalah kutipan dari halaman manual 'git-branch':

Dengan opsi -m atau -M, <oldbranch>akan diubah namanya menjadi <newbranch>. Jika <oldbranch>memiliki reflog yang sesuai, namanya diubah agar sesuai <newbranch>, dan entri reflog dibuat untuk mengingat penggantian nama cabang. Jika <newbranch>ada, -M harus digunakan untuk memaksa penggantian nama agar terjadi.

Vanchev
sumber
2
Apa yang terjadi pada cabang yang ditimpa?
Kevin Dice
Ditimpa oleh nama / cabang baru. Sebagai contoh jika Anda memiliki cabang berikut di git: master b1 <- cabang saat ini b2 setelah Anda melakukan 'git branch -M b2' Anda hanya akan memiliki: master b2 <- cabang saat ini b1 akan hilang dan jika Anda ingin memulihkannya Anda harus memeriksanya dengan hash-nya. Anda dapat melihatnya dengan mengetikkan 'git reflog'. Bersulang.
Vanchev
The -MBendera ini juga berguna untuk memaksa mengubah nama jika Anda hanya mengoreksi kasus nama cabang, misalnya mengubah myBranchke MyBranch. (Dengan -m, git kembali fatal: A branch named 'MyBranch' already exists.)
Jon Schneider
92

1. Ganti nama

Jika itu adalah cabang Anda saat ini, lakukan saja

git branch -m new_name

Jika cabang lain yang ingin Anda ganti namanya

git branch -m old_name new_name

2. Lacak cabang jarak jauh yang baru

- Jika cabang Anda didorong, maka setelah mengganti nama Anda harus menghapusnya dari repositori Git jarak jauh dan meminta lokal baru Anda untuk melacak cabang jarak jauh baru:

git push origin :old_name
git push --set-upstream origin new_name
Oss
sumber
74

Aku dengan bodohnya memberi nama cabang yang dimulai dengan tanda hubung, dan kemudian memeriksa master. Saya tidak ingin menghapus cabang saya, saya punya pekerjaan di dalamnya.

Tak satu pun dari ini bekerja:

git checkout -dumb-name

git checkout -- -dumb-name

"s, 's dan \s juga tidak membantu. git branch -mtidak bekerja

Inilah cara saya akhirnya memperbaikinya. Pergilah ke copy pekerjaan Anda .git / refs / head, cari nama file "-dumb-name", dapatkan hash dari cabang. Maka ini akan memeriksanya, membuat cabang baru dengan nama waras, dan menghapus yang lama.

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name
Samuel Meacham
sumber
8
Tidak bisakah Anda mengganti nama file dalam referensi / kepala?
android.weasel
Dito. Jika Anda harus menggali ke dalam struktur direktori untuk melakukan keajaiban ini, pergilah dan lakukan 'mv - -dumb-name brilliant-name' Do a 'git branch -av' dan Anda akan melihat struktur direktori dari .git / ref. Atau mungkin 'grep -R ^ .git / ref' untuk melihat hash secara langsung.
Dave X
2
Anda mungkin bisa menggunakanreflog
Code Whisperer
Jujur, jika itu rute yang ingin Anda ambil, saya akan menghindari (IMO membingungkan dan berpotensi berbahaya jika Anda tidak tahu apa yang Anda lakukan) jaunt melalui direktori .git di tempat pertama, dan lakukan saja dengan beberapa perintah normal dengan parsing "git log" (menggunakan flag yang sesuai untuk menampilkan cabang, dan untuk mengetahui shasum mana Anda ingin checkout dari cabang baru), dan kemudian lakukan. Kemudian, hapus cabang yang dinamai winky. Saya membenci git yang bersikeras bahwa Anda perlu memahami semua pekerjaan batiniahnya untuk melakukan beberapa hal, tetapi sangat menghargai bahwa Anda dapat melakukan hal-hal itu.
Jon V
Lebih sulit untuk membuat cabang dengan nama yang buruk di 2.10.1+. Jika Anda melakukannya, Anda bisa menggunakan git branch -v untuk mendapatkan versi hash pendek dari cabang Anda (tambahkan -r untuk remote). Anda kemudian dapat menggunakan git rev-parse <shorthash> untuk mendapatkan hash lengkap jika Anda membutuhkannya.
House of Dexter
67

Untuk mengganti nama cabang secara lokal:

git branch -m [old-branch] [new-branch]

Sekarang Anda harus menyebarkan perubahan ini di server jauh Anda juga.

Untuk mendorong perubahan dari cabang lama yang dihapus:

git push origin :[old-branch]

Untuk mendorong perubahan pembuatan cabang baru:

git push origin [new-branch]
aliasav
sumber
57

Hanya tiga langkah untuk meniru perubahan nama di remotedan juga di GitHub:

Langkah 1 git branch -m old_branchname new_branchname

Langkah 2 git push origin :old_branchname new_branchname

Langkah 3 git push --set-upstream origin new_branchname

Harry_pb
sumber
2
Saya juga harus melakukan satu hal tambahan: git push --set-upstream origin new_branchnameyang disebutkan dalam @Nomade answer
IbrahimShendy
2
Langkah 3 tidak diperlukan. Semuanya diperbarui setelah Langkah 2.
Dev
@ Ev tidak dalam semua kasus Dev, saya harus memperbarui baru-baru ini karena menggunakan bitbucket dan codecommit, langkah 3 diperlukan
Harry_pb
40

Ganti nama cabang menggunakan perintah ini:

git branch -m [old_branch_name] [new_branch_name]

-m: Ini mengubah nama / memindahkan cabang. Jika sudah ada cabang, Anda akan mendapatkan kesalahan.

Jika sudah ada cabang dan Anda ingin mengganti nama dengan cabang itu, gunakan:

 git rename -M [old_branch_name] [new_branch_name]

Untuk informasi lebih lanjut tentang bantuan, gunakan perintah ini di terminal:

git branch --help

atau

man git branch
Hafiz Shehbaz Ali
sumber
40

Pengguna Advanced Git dapat mengubah nama secara manual menggunakan:

Rename the old branch under .git/refs/heads to the new name

Rename the old branch under .git/logs/refs/heads to the new name

Update the .git/HEAD to point to yout new branch name
Jethik
sumber
34
  1. Ganti nama cabang lokal Anda.

Jika Anda berada di cabang yang ingin Anda ganti namanya:

git branch -m new-name

Jika Anda berada di cabang yang berbeda:

git branch -m old-name new-name
  1. Hapus cabang jarak jauh nama lama dan dorong cabang lokal nama baru.

git push origin :old-name new-name

  1. Setel ulang cabang upstream untuk cabang lokal nama baru. Beralih ke cabang dan kemudian:

git push origin -u new-name

Atau untuk cara cepat melakukannya, Anda dapat menggunakan 3 langkah ini:

# Ganti nama cabang secara lokal

git branch -m old_branch new_branch  

# Hapus cabang jarak jauh yang lama

git push origin :old_branch  

# Dorong cabang baru, atur cabang lokal untuk melacak remote baru

git push --set-upstream origin new_branch   

Referensi: https://www.w3docs.com/snippets/git/how-to-rename-git-local-and-remote-branches.html

badarshahzad
sumber
ini bekerja untuk saya
Vazgen Manukyan
26

Berikut adalah tiga langkah: Perintah yang dapat Anda panggil di dalam terminal Anda dan ubah nama cabang.

git branch -m old_branch new_branch         # Rename branch locally
git push origin :old_branch                 # Delete the old branch
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

Jika Anda membutuhkan lebih banyak: langkah demi langkah, Cara Mengubah Nama Cabang Git adalah artikel yang bagus tentang itu.

Hazarapet Tunanyan
sumber
25

Mungkin seperti yang disebutkan oleh orang lain, ini akan menjadi kasus ketidakcocokan dalam penamaan cabang.

Jika Anda memiliki situasi seperti itu, saya dapat menebak bahwa Anda menggunakan Windows yang juga akan mengarahkan Anda ke:

$ git branch -m CaseSensitive casesensitive
fatal: A branch named 'casesensitive' already exists.

Maka Anda harus melakukan langkah menengah:

$ git branch -m temporary
$ git branch -m casesensitive

Tidak ada lagi.

P4C
sumber
1
Perhatikan bahwa situasi ini mungkin juga muncul pada Mac, yang juga (sangat mengganggu) tidak sensitif dalam sistem file-nya.
Jon V
Atau, Anda dapat menggunakan -Malih-alih -mmelakukan semacam ini "ganti casing" ganti nama dalam satu langkah.
Jon Schneider
23

Mencoba menjawab secara khusus untuk pertanyaan (setidaknya judul).

Anda juga dapat mengganti nama cabang lokal , tetapi tetap melacak nama lama di remote.

git branch -m old_branch new_branch
git push --set-upstream origin new_branch:old_branch

Sekarang, ketika Anda menjalankan git push, old_branchreferensi jarak jauh diperbarui dengan lokal Anda new_branch.

Anda harus mengetahui dan mengingat konfigurasi ini. Tetapi ini bisa bermanfaat jika Anda tidak memiliki pilihan untuk nama cabang jarak jauh, tetapi Anda tidak menyukainya (oh, maksud saya, Anda punya alasan yang sangat bagus untuk tidak menyukainya!) Dan lebih suka yang lebih jelas nama untuk cabang lokal Anda.

Bermain dengan konfigurasi ambil, Anda bahkan dapat mengganti nama referensi jarak jauh lokal. yaitu, memiliki refs/remote/origin/new_branchpointer ref ke cabang, yang notabene old_branchon origin. Namun, saya sangat tidak menyarankan ini, untuk keselamatan pikiran Anda.

Pierre-Olivier Vares
sumber
22

Mengubah cabang secara lokal cukup mudah ...

Jika Anda berada di cabang yang ingin Anda ganti namanya, cukup lakukan ini:

git branch -m my_new_branch

Jika tidak, jika Anda berada di masteratau cabang lain selain yang ingin Anda ganti namanya, cukup lakukan:

git branch -m my_old_branch my_new_branch

Juga, saya membuat gambar di bawah ini untuk menunjukkan ini dalam tindakan pada baris perintah . Dalam hal ini, Anda berada di mastercabang, misalnya:

Ubah nama cabang secara lokal

Alireza
sumber
21

Jika Anda bersedia menggunakan SourceTree (yang sangat saya rekomendasikan), Anda dapat mengklik kanan cabang Anda dan memilih 'Ganti Nama'.

masukkan deskripsi gambar di sini

Marcin Szymczak
sumber
20

Untuk mengganti nama cabang saat ini (kecuali untuk kondisi HEAD yang terlepas) Anda juga dapat menggunakan alias ini:

[alias]
    mvh = !sh -c 'git branch -m `git rev-parse --abbrev-ref HEAD` $1'
dentuzhik
sumber
18

Opsi lain adalah tidak menggunakan baris perintah sama sekali. Klien Git GUI seperti SourceTree mengambil banyak kurva pembelajaran sintaksis / rasa sakit yang menyebabkan pertanyaan seperti ini menjadi salah satu yang paling banyak dilihat di Stack Overflow.

Di SourceTree, klik kanan pada cabang lokal di panel "Cabang" di sebelah kiri dan pilih "Ganti nama ...".

Steve Chambers
sumber
5
Saya tidak akan menyebutnya sakit. Perintah git sangat mudah digunakan, setelah Anda melihat jawaban ini, Anda mungkin tidak akan pernah kembali lagi. Masalahnya lebih dari itu, jadi sepertinya, dokumentasi dari git command-line tidak cukup intuitif.
Nearoo
1
Benar tetapi dengan SourceTree saya hampir tidak perlu khawatir tentang memeriksa dokumentasi. Semuanya umumnya intuitif - cukup klik kanan dan lihat opsi apa yang ada. (BTW saya tidak berafiliasi dengan mereka dengan cara apa pun - sama seperti alat!)
Steve Chambers
17

Cara mudah untuk melakukannya:

git branch -m old_branch new_branch         # Rename branch locally
git push origin :old_branch                 # Delete the old branch
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

Untuk lebih lanjut, lihat ini .

Nomade
sumber
15

Karena Anda tidak ingin mendorong cabang ke server jauh, contoh ini akan berguna:

Katakanlah Anda memiliki cabang yang ada yang disebut "fitur-panas-ku", dan Anda ingin mengubah nama menjadi "fitur-15."

Pertama, Anda ingin mengubah cabang lokal Anda. Ini tidak bisa lebih mudah:

git branch -m my-hot-feature feature-15

Untuk informasi lebih lanjut, Anda dapat mengunjungi Secara Lokal dan Mengganti Nama Jarak Jauh Cabang di Git .

Tanah
sumber
13

Git versi 2.9.2

Jika Anda ingin mengubah nama cabang lokal Anda berada di:

git branch -m new_name

Jika Anda ingin mengubah nama cabang yang berbeda:

git branch -m old_name new_name

Jika Anda ingin mengubah nama cabang yang berbeda menjadi nama yang sudah ada:

git branch -M old_name new_name_that_already_exists

Catatan: Perintah terakhir bersifat merusak dan akan mengganti nama cabang Anda, tetapi Anda akan kehilangan cabang lama dengan nama itu dan itu dilakukan karena nama-nama cabang harus unik.

nikkypx
sumber
11

Jika Anda ingin mengubah nama cabang saat ini, jalankan:

git branch -m [old_branch] [new_branch]

Jika Anda ingin menghapus cabang jarak jauh yang lama, jalankan:

git push origin :[old_branch]

Jika Anda ingin menghapus cabang jarak jauh yang lama dan membuat cabang jarak jauh yang baru, jalankan:

git push origin :old_branch new_branch
Arif
sumber
6

Ganti nama cabang Git dapat dilakukan dengan menggunakan:

  1. git branch -m oldBranch newBranch

  2. git branch -M oldBranch ExistingBranch

Perbedaan antara -m dan -M :

-m: jika Anda mencoba mengubah nama cabang Anda dengan nama cabang yang ada menggunakan -m . Ini akan memunculkan kesalahan dengan mengatakan bahwa cabang sudah ada. Anda harus memberi nama yang unik.

Tapi,

-M: ini akan membantu Anda untuk memaksa mengganti nama dengan nama yang diberikan, meskipun itu ada. Jadi cabang yang ada akan menimpa sepenuhnya dengan itu ...

Berikut adalah contoh terminal Git,

mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
  test
* test1
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -m test1 test
fatal: A branch named 'test' already exists.
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -M test1 test
mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
* test
mohideen@dev:~/project/myapp/sunithamakeup$
Mohideen bin Mohammed
sumber
5

Untuk pengguna Git GUI itu tidak bisa lebih sederhana. Di Git GUI, pilih nama cabang dari daftar turun bawah di kotak dialog "Ubah Nama Cabang" yang dibuat dari item menu Cabang: Ubah nama, ketikkan Nama Baru, dan klik "Ganti nama". Saya telah menyoroti di mana menemukan daftar drop down.

Ganti nama cabang Git lokal

Ivan
sumber
3

Jika Anda menghendaki:

  • Ganti nama repositori Git, jalankan: git branch -m <oldname> <newname>
  • Hapus cabang lama dengan: git push origin: old-name new-name
  • Komit menggunakan: git commit <newname>
    • dan kemudian dorong menggunakan: git push origin new_branch_name:master
  • Jika Anda ingin memeriksa statusnya maka gunakan: git status
  • Jika Anda ingin check-out maka gunakan: git checkout
Vineet Jain
sumber
3

Semua jawaban sebelumnya dibicarakan git branch -m . Tentu saja, mudah dioperasikan, tetapi bagi saya, mungkin agak sulit mengingat perintah Git yang lain. Jadi saya mencoba menyelesaikan pekerjaan dengan perintah yang saya kenal. Ya, Anda bisa menebaknya.

Saya menggunakan git branch -b <new_branch_name>. Dan jika Anda tidak ingin menyimpan cabang lama sekarang, Anda dapat menjalankan git branch -D <old_branch_name>untuk menghapusnya.

Saya tahu ini mungkin sedikit membosankan, tetapi lebih mudah dipahami dan diingat. Saya harap ini membantu Anda.

Dai Kaixian
sumber
Jika Anda kesulitan mengingat perintah, Anda dapat mengatur sendiri shell atau git alias.
sean
bagaimana jika saya perlu menjalankan perintah pada banyak mesin yang berbeda?
Dai Kaixian
1

Dalam PhpStorm:

VCS → Git → Cabang ... → Cabang Lokal → _your_branch_ → Ubah nama

AlexSi
sumber
0

Yang harus Anda lakukan adalah tiga langkah:

  1. Berikan cabang lama di bawah .git / refs / head nama baru
  2. Berikan cabang lama di bawah .git / logs / refs / kepala nama baru
  3. Perbarui .git / KEPALA untuk mengarah ke nama cabang baru Anda

sumber