Mengganti nama cabang di GitHub

297

Saya baru saja mengganti nama cabang lokal saya menggunakan

git branch -m oldname newname

tetapi ini hanya mengganti nama versi lokal cabang. Bagaimana saya bisa mengganti nama yang ada di GitHub?

enchance
sumber
5
kemungkinan duplikat git: rename remote branch
Andrew Marshall
Sudahkah Anda memeriksa di pengaturan admin? Proyek saya saat ini di github tidak memiliki cabang tetapi Anda dapat mengganti nama repo di sana jadi saya akan berpikir Anda bisa mengganti nama cabang juga.
evanmcdonnal
12
@ evanmcdonnal Tidak, Anda tidak dapat mengubah nama cabang Git dari situs GitHub.
Andrew Marshall
Jawaban untuk pertanyaan ini hampir secara universal salah. Pertanyaannya bukan bagaimana mengubah nama cabang git, tapi bagaimana cara mengganti nama cabang github . Banyak hal di github terikat pada cabang yang berarti jawaban apa pun perlu mencakup hal-hal itu. Misalnya mengganti nama master menjadi main
gman
@ gman Untuk apa nilainya, tampaknya jawaban ini menjawab semangat pertanyaan OP. Pertanyaan OP mungkin tidak diutarakan dengan sempurna, dari sudut pandang yang secara teknis tepat, atau masalah yang relevan yang sedang Anda perhatikan. Tapi kemudian, pertanyaan ini tidak datang dari latar belakang teknis yang mendalam baik git atau GitHub. Dari perspektif ini, seseorang dapat menganggap ini sebagai pertanyaan "pemula" atau dasar. Dengan demikian, ini diungkapkan, & dijawab dengan tepat untuk pemirsa ini. Frustasi, pasti, tapi saya pikir Q ini, Jawaban ini sesuai / relevan, khususnya untuk penggunaan BLM git / Hub sebelumnya.
SherylHohman

Jawaban:

309

Seperti yang disebutkan, hapus yang lama di Github & tekan kembali, meskipun perintah yang digunakan sedikit lebih bertele-tele daripada yang diperlukan:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

Sederhana. Membedah perintah sedikit, perintah git push pada dasarnya:

git push <remote> <local_branch>:<remote_branch>

Jadi melakukan push tanpa local_branch ditentukan pada dasarnya berarti "mengambil apa-apa dari repositori lokal saya, dan menjadikannya cabang jarak jauh". Saya selalu berpikir ini benar-benar kotor, tapi begitulah caranya.

Sunting: Pada Git 1.7 ada sintaks alternatif untuk menghapus cabang jarak jauh:

git push origin --delete name_of_the_remote_branch

Sunting: Seperti yang disebutkan oleh @ void.pointer di komentar

Perhatikan bahwa Anda dapat menggabungkan 2 operasi push:

git push origin :old_branch new_branch

Ini akan menghapus cabang lama dan mendorong yang baru.

Ini bisa diubah menjadi alias sederhana yang menggunakan remote, cabang asli dan nama cabang baru sebagai argumen, di ~/.gitconfig:

[alias]
    branchm = "!git branch -m $2 $3 && git push $1 :$2 $3 -u #"

Pemakaian:

git branchm origin old_branch new_branch

Perhatikan bahwa argumen posisional dalam perintah shell bermasalah di versi git yang lebih lama (pra 2.8?), Sehingga alias dapat bervariasi sesuai dengan versi git. Lihat diskusi ini untuk detailnya.

Adam Parkin
sumber
32
Perhatikan bahwa Anda dapat menggabungkan 2 operasi push: git push origin :old_branch new_branch. Ini akan menghapus cabang lama dan mendorong yang baru.
void.pointer
4
Apakah ada alasan mengapa cabang baru tidak dapat didorong sebelum menghapus yang lama? Saya pribadi lebih suka proses di mana operasi penghapusan terjadi setelah operasi buat berhasil, kalau-kalau ada sesuatu yang salah.
jmort253
7
Tidak bekerja. Itu hanya akan menempatkan cabang kembali di Github dengan nama lamanya.
geoff
1
@AdamParkin 1. git branch -m new_branch(ganti nama old_branch menjadi new_branch) 2. git commit -m 'msg', 3. git push4. Mhmm, old_branch muncul di Github, pertanyaan Google dan saya diarahkan ke jawaban Anda 5. git push origin :old_branch(mengatakan itu dihapus) 6. git push origin new_branch... selesai kemudian berkata * [new branch] new_branch -> old_branch. Kembali ke Github dan old_branchmuncul lagi. Jika saya menghapus di Github web UI, saya memiliki opsi untuk "Pulihkan," jadi sepertinya mendorong new_branch baru saja memulihkan.
Kcvin
2
Satu hal yang perlu diperhatikan adalah bahwa ketika Anda mengganti nama cabang, permintaan tarik apa pun yang Anda buka terhadap permintaan tarik itu akan ditutup secara otomatis. Kami harus mengganti nama cabang kembali dan kemudian membuka kembali secara manual semua permintaan tarik ....
jmort253
24

Perintah berikut bekerja untuk saya:

git push origin :old-name-of-branch-on-github
git branch -m old-name-of-branch-on-github new-name-for-branch-you-want
git push origin new-name-for-branch-you-want
Taimoor Changaiz
sumber
Inilah jawaban singkat yang berfungsi. BTW, perintah pertama juga bisa dimasukkan sebagai yang terakhir dalam jawaban.
Eric Wang
jawaban ini mencakup git bukan github
gman
1
Sebenarnya, saya hanya melakukan ini dua kali dan berhasil pada github.
spozun
17

Saya telah menemukan 3 perintah bagaimana Anda dapat mengubah nama cabang git Anda, dan perintah ini adalah cara yang lebih cepat 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

Jika Anda memerlukan langkah demi langkah Anda dapat membaca artikel yang bagus ini

Bagaimana Mengganti Nama Git Cabang Lokal dan Remote

Hazarapet Tunanyan
sumber
1
git push --set-upstreamadalah bagian terpenting jika Anda mengubah nama cabang secara lokal menggunakan aplikasi github sebelum menghapus cabang jarak jauh.
Louis Yang
jawaban ini mencakup git bukan github
gman
12

Hapus saja cabang lama dan buat yang baru.

Contoh (hanya mengganti nama cabang jarak jauh):

git push origin :refs/heads/oldname
git push origin newname:refs/heads/newname

Anda juga mungkin harus mengganti nama cabang lokal dan mengubah pengaturan tempat mendorong / menarik.

Vi.
sumber
1
Bukankah seharusnya perintah kedua git push origin newname:refs/heads/newname? master dan newname mungkin tidak menunjuk ke komit yang sama.
Steve Folly
"master" hanyalah sebagai contoh, akan berubah sekarang.
Vi.
Mungkin urutan dua perintah harus dibalik (mis. Unggah nama baru dulu, hapus yang lama setelah itu)
Vi.
jawaban ini mencakup git bukan github
gman
@ gman, Tidak mengganti nama menjadi Git-wise juga mengganti nama menjadi Github-Wise?
Vi.
9

Ganti nama cabang di git lokal dan jarak jauh

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.

Beralih ke cabang dan kemudian:

git push origin -u new-name

Jadi kesimpulannya adalah

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name
Abdelrahman Mohamed
sumber
jawaban ini mencakup git bukan github
gman
Ini untuk git dan GitHub di bawah git sehingga akan bekerja dan bekerja dengan saya dan orang lain
Abdelrahman Mohamed
Itu tidak bekerja. Coba langkah pertama dan kedua git branch -m new-name && git push origin :master new-name. Itu akan gagal. Jika jawaban ini hanya tentang git dan bukan github maka pertanyaan ini adalah duplikat dari beberapa pertanyaan lain dan harus ditutup. Jika itu benar-benar tentang github maka jawabannya harus mencakup github. Jawaban ini tidak.
gman
2

Inilah yang bekerja untuk saya:

1.) Buat cabang baru terlebih dahulu: git push github newname: refs / heads / newname

2.) Di situs github, pengaturan goto dan ubah cabang Default ke nama baru

3.) Hapus oldname git push github --delete oldname

Wiley
sumber
0
  1. Unduh Atlassian SourceTree (gratis).
  2. Impor klon lokal repositori Anda.
  3. Klik kanan cabang Anda untuk mengganti nama, di bilah sisi. Pilih "Ubah nama cabang ..." dari menu konteks, dan ganti namanya.
  4. Dorong ke asal.
Insinyur
sumber
Terima kasih, tetapi saya harus beralih ke cabang serta mengimpornya.
Flash Sheridan
1
jawaban ini mencakup git bukan github
gman
0

Artikel ini menunjukkan cara melakukannya dengan sangat mudah.
1. Untuk mengganti nama cabang Git lokal, kita dapat menggunakan perintah Git branch -m untuk memodifikasi nama:
git branch -m feature1 feature2
2. Jika Anda hanya mencari perintah untuk mengubah nama cabang Git jarak jauh, ini dia "
git push -u origin feature2:feature3
Periksa apakah Anda tidak memiliki tag pada cabang sebelum Anda melakukan ini. Anda dapat melakukannya dengan git tag.

Daniel Kobe
sumber
jawaban ini mencakup git bukan github
gman
0

Cara lain adalah mengubah nama file-file berikut :

  1. navigasi direktori proyek Anda
  2. ganti nama .git/refs/head/[branch-name]menjadi.git/refs/head/new-branch-name
  3. ganti nama .git/refs/remotes/[all-remote-names]/[branch-name]menjadi.git/refs/remotes/[all-remote-names]/new-branch-name

Ganti nama head & remote pada PC lokal Anda dan pada asal-usul / server jauh

Cabang sekarang diganti namanya (lokal dan jauh!)


Perhatian

Jika nama cabang Anda saat ini mengandung garis miring ( /) git akan membuat direktori seperti:

nama cabang saat ini: "awe/some/branch"

  • .git/refs/head/awe/some/branch
  • .git/refs/remotes/[all-remote-names]/awe/some/branch

berharap nama cabang: "new-branch-name"

  1. navigasi direktori proyek Anda
  2. salin branchfile dari.git/refs/*/awe/some/
  3. taruh di .git/refs/head/ .
  4. salin branchfile dari semua.git/refs/remotes/*/awe/some/
  5. masukkan mereka .git/refs/remotes/*/ .
  6. ganti nama semua branchfile yang disalin menjadinew-branch-name .
  7. periksa apakah direktori dan struktur file sekarang terlihat seperti ini:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. lakukan hal yang sama pada semua asal / server jauh Anda (jika ada)
    • info : pada remote-server biasanya tidak ada direktori ref / remote / * karena Anda sudah di remote-server;) (well mungkin dalam konfigurasi lanjutan git itu mungkin, tetapi saya belum pernah melihat itu)

Cabang sekarang diubah namanya dari awe/some/branchmenjadinew-branch-name (lokal dan jauh!)

Direktori dengan nama cabang dihapus.


Info: Cara ini mungkin bukan yang terbaik, tetapi masih berfungsi untuk orang yang mungkin memiliki masalah dengan cara lain

Iyashi
sumber
jawaban ini mencakup git bukan github
gman
0

Dalam kasus saya, saya membutuhkan perintah tambahan untuk mendorong cabang saya yang diganti nama menjadi push up .
git branch --unset-upstream
origin newname

(Untuk kemudahan mengetik), saya pertama kali git checkout oldname.
Kemudian jalankan yang berikut ini:

git branch -m newname
git push origin :oldname atau ataugit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

Langkah tambahan ini mungkin hanya diperlukan karena saya (cenderung) mengatur pelacakan jarak jauh melalui cabang saya melalui . Dengan cara ini ketika saya sudah check out, saya hanya perlu mengetik daripadagit push -u origin oldnameoldnamegit pushgit push origin oldname

Jika saya TIDAK menggunakan perintah git branch --unset-upstreamsebelumnya git push origin newbranch, git menciptakan kembali oldbranch dan mendorong newbranchuntuk origin oldbranch- mengalahkan maksud saya.

SherylHohman
sumber
jawaban ini mencakup git bukan github
gman
@man Point diambil. Solusi saya menggunakan git secara lokal untuk mengubah nama cabang di GitHub, dari jarak jauh, setelah mengubah nama itu pada salinan git lokal dari repositori GitHub. Jadi mungkin itu dapat dianggap sebagai solusi khusus, karena ketika Anda ingin menggunakan baris perintah, daripada antarmuka situs web GitHub, dan Anda memiliki klon lokal yang juga ingin Anda perbarui. Terima kasih telah menyoroti perbedaan ini, dan mengklarifikasi bahwa jawaban ini untuk kasus khusus, bukan solusi umum.
SherylHohman
Masalahnya adalah fitur github ties ke cabang. Cobalah mengganti nama master menjadi utama dan instruksi Anda akan gagal.
GM
-1

Perintah berikut mengubah nama cabang secara lokal, menghapus cabang lama di lokasi jarak jauh dan mendorong cabang baru, mengatur cabang lokal untuk melacak jarak jauh baru:

git branch -m old_branch new_branch
git push origin :old_branch
git push --set-upstream origin new_branch
Pooja Mane
sumber
Meskipun cuplikan kode Anda mungkin menyelesaikan masalah, Anda harus menjelaskan apa tujuan kode Anda (bagaimana memecahkan masalah). Selanjutnya, Anda mungkin ingin memeriksa stackoverflow.com/help/how-to-answer
Ahmad F
jawaban ini mencakup git bukan github
gman
-1

Sesederhana itu . Untuk mengganti nama cabang git secara lokal dan menggunakan potongan ini dari jarak jauh (diuji dan bekerja seperti mantra):

git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>

Penjelasan:

  1. Ganti nama Langkah:

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

  2. Hapus Langkah:

    Referensi Git: git push origin: eksperimental Temukan ref yang cocok dengan eksperimen dalam repositori asal (mis. Ref / head / eksperimental), dan hapus.

  3. Perbarui pada repo jarak jauh Langkah (referensi hulu untuk pelacakan):

    Referensi Git: --set-upstream Untuk setiap cabang yang up to date atau berhasil didorong, tambahkan referensi upstream (pelacakan), digunakan oleh argumen-less git-pull [1] dan perintah lainnya. Untuk informasi lebih lanjut, lihat branch..merge in git-config [1].

avivamg
sumber
jawaban ini mencakup git bukan github
gman
-1

3 langkah sederhana

  • git dorong kepala asal

  • git branch -m nama-cabang-lama-nama-cabang baru

  • git dorong kepala asal

Martin Mungai
sumber
jawaban ini mencakup git bukan github
gman
-1

Pada cabang git, jalankan cabang git -m old_name new_name. Ini akan mengubah nama cabang pada repo lokal git Anda. cabang terpencil. Ini menyelesaikan masalah

Paus Francis
sumber
jawaban ini mencakup git bukan github
gman