Bagaimana cara mengganti nama baik nama cabang lokal dan jarak jauh Git?

457

Saya memiliki empat cabang seperti master -> origin / regacy, FeatureA -> origin / FeatureA. Seperti yang Anda lihat, saya mengetik nama yang salah.

Jadi saya ingin mengganti nama nama cabang jarak jauh (asal / regacy → asal / warisan atau asal / master)

Saya coba perintah di bawah ini:

git remote rename regacy legacy

Tapi Git console mengembalikan pesan kesalahan kepada saya.

 error : Could not rename config section 'remote.regacy' to 'remote.legacy'

Bagaimana saya bisa menyelesaikan masalah ini?

JayD
sumber

Jawaban:

809

Masukkan deskripsi gambar di sini


Ada beberapa cara untuk mencapai itu:

  1. Ubah cabang lokal Anda dan kemudian dorong perubahan Anda
  2. Dorong cabang ke jarak jauh dengan nama baru sambil menjaga nama asli secara lokal

Mengganti nama lokal dan jarak jauh

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

# Delete the old branch on remote - where <remote> is, for example, origin
git push <remote> --delete <old_name>

# Or shorter way to delete remote branch [:]
git push <remote> :<old_name>

# Push the new branch to remote
git push <remote> <new_name>

# Reset the upstream branch for the new_name local branch
git push <remote> -u <new_name>

Masukkan deskripsi gambar di sini


Mengganti nama Hanya cabang jarak jauh

Kredit: ptim

# In this option, we will push the branch to the remote with the new name
# While keeping the local name as is
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Catatan penting:

Saat Anda menggunakan git branch -m(pindah), Git juga memperbarui cabang pelacakan Anda dengan nama baru.

git remote rename legacy legacy

git remote renamesedang mencoba memperbarui bagian jarak jauh Anda di file konfigurasi Anda. Ini akan mengubah nama remote dengan nama yang diberikan ke nama baru, tetapi dalam kasus Anda, itu tidak menemukan apa pun, sehingga penggantian nama gagal.

Tetapi itu tidak akan melakukan apa yang Anda pikirkan; itu akan mengubah nama nama konfigurasi lokal Anda dan bukan cabang jarak jauh. 


Catatan Git server mungkin memungkinkan Anda untuk mengganti nama cabang Git menggunakan antarmuka web atau program eksternal (seperti Sourcetree, dll.), Tetapi Anda harus ingat bahwa di Git semua pekerjaan dilakukan secara lokal, jadi disarankan untuk menggunakan perintah di atas untuk pekerjaan.

Panduan Kode
sumber
Anda masih perlu melakukan sesuatu, setelah hal di atas dan ketika saya mencoba menarik saya mendapat pesan:Your configuration specifies to merge with the ref ''refs/heads/old_name'
Krzysztof Krasoń
6
Jangan lupa untuk menghapus hulu yang lama:git checkout <new_name> ; git branch --unset-upstream
Miguel Ping
2
Komentar @ MiguelPing penting. Saat mencoba mengubah nama cabang, saya sudah mendorong ke github, menghapus, mengganti nama lokal, dan mendorong kembali hasil dalam nama lama yang digunakan lagi. Jika saya --unset-upstreamsebelum mendorong kembali, itu berfungsi sebagaimana dimaksud.
Adam Tuttle
1
Apakah ada cara untuk menghindari penutupan otomatis PR terbuka pada cabang nama lama pada remote? Menghadapi ini di gitlab, di mana PR pada nama cabang lama ditutup setelah mendorong ke asal.
Himanshu Tanwar
142

Jika Anda salah menamai cabang DAN mendorongnya ke repositori jauh, ikuti langkah-langkah ini untuk mengganti nama cabang itu ( berdasarkan artikel ini ):

  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 old-namecabang jarak jauh dan dorong new-namecabang lokal :
    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

PAN ZILONG
sumber
1
Setelah 2 langkah pertama, jika Anda mendapatkan pesan kesalahan tentang cabang saat ini menunjuk ke cabang yang tidak ada di repo jarak jauh, langkah ke-3 memperbaiki ini
Kevin Hooke
1
@ Dr1Ku Perlu tahu perbedaan antara git push <remote> --delete old_name& git push origin :old-name new-nameuntuk menghapus cabang.
Ashutosh Chamoli
Pengguna BitBucket: perbaiki kesalahan pada Langkah 2 jika mengganti nama master, dalam Detail Repo atur cabang default ke cabang baru. Kesalahannya adalah:By default, deleting the current branch is denied, because the next 'git clone' won't result in any file checked out, causing confusion. You can set 'receive.denyDeleteCurrent' configuration variable to 'warn' or 'ignore' in the remote repository to allow deleting the current branch, with or without a warning message. To squelch this message, you can set it to 'refuse'. error: refusing to delete the current branch: refs/heads/master
Colin
salah satu yang termudah antara lain
Abdulla Nilam
37

Tampaknya ada cara langsung:

Jika Anda benar-benar hanya ingin mengubah nama cabang dari jarak jauh (tanpa mengubah nama cabang lokal pada saat yang sama), Anda dapat melakukan ini dengan satu perintah seperti

git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Mengganti nama cabang dari jauh di Git

Lihat jawaban asli untuk lebih detail.

ptim
sumber
1
Tidak berfungsi di git 2.20.1Menghapus cabang lama tetapi yang baru tidak dibuat.
Paul Razvan Berg
26

Itu juga bisa dilakukan dengan cara berikut.

Mula-mula ganti nama cabang lokal, lalu cabang jarak jauh.

Mengganti nama cabang lokal:

Jika login di cabang lain,

git branch -m old_branch new_branch 

Jika login di cabang yang sama,

git branch -m new_branch

Mengganti nama cabang jarak jauh:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch
Atequer Rahman
sumber
5

Jika Anda sudah mendorong nama yang salah ke jarak jauh, lakukan hal berikut:

  1. Beralih ke cabang lokal yang ingin Anda ganti namanya

    git checkout <old_name>

  2. Ganti nama cabang lokal

    git branch -m <new_name>

  3. Dorong <new_name>cabang lokal dan setel ulang cabang hulu

    git push origin -u <new_name>

  4. Hapus <old_name>cabang jarak jauh

    git push origin --delete <old_name>

Ini didasarkan pada artikel ini .

milesmeow
sumber
4

Melampirkan Cuplikan Sederhana untuk mengganti nama cabang Anda saat ini (lokal dan asal):

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

Penjelasan dari git docs:

opsi git branch -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 agar terjadi.

Refspec khusus: (atau +: untuk memungkinkan pembaruan non-maju) mengarahkan Git untuk mendorong cabang "cocok": untuk setiap cabang yang ada di sisi lokal, sisi jarak jauh diperbarui jika cabang dengan nama yang sama sudah ada di sisi yang jauh.

--set-upstream Menyiapkan informasi pelacakan sehingga dianggap sebagai cabang upstream. Jika tidak ditentukan, maka default ke cabang saat ini.

avivamg
sumber
3

Tidak ada metode langsung,

  1. Ganti nama Cabang Lokal ,

    Cabang saya saat ini adalah master

    git branch -m master_renamed #master_renamed adalah nama baru master

  2. Hapus cabang jarak jauh,

    git push origin --delete master #origin adalah remote_name

  3. Dorong cabang yang diganti nama menjadi jauh,

    git push origin master_renamed

Itu dia...

Mohideen bin Mohammed
sumber
Bagus dan sederhana dan hanya 3 langkah. Hanya perbaikan yang dapat saya sarankan git push -u origin master_renameduntuk menetapkan cabang sebagai cabang pelacakan
ut9081
2

Ini dapat dilakukan bahkan tanpa mengganti nama cabang lokal dalam tiga langkah sederhana:

  1. Buka repositori Anda di GitHub
  2. Buat cabang baru dari cabang lama yang ingin Anda ganti namanya
  3. Hapus cabang lama
Code_Mode
sumber
0

Saya menggunakan ini alias git dan cukup banyak pekerjaan otomatis:

git config --global alias.move '!git checkout master; git branch -m $1 $2; git status; git push --delete origin $1; git status; git push -u origin $2; git branch -a; exit;'

Penggunaan: git pindahkan FROM_BRANCH TO_BRANCH

Ini berfungsi jika Anda memiliki nama default seperti master, origin dll. Anda dapat memodifikasi sesuai keinginan tetapi memberi Anda ide.

Tarik
sumber
0

Saya harus melakukan tugas berikut untuk mengubah nama cabang lokal dan jarak jauh:

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

#  Delete the old remote branch
git push origin --delete <old_name>

# push to new remote branch - creates new remote branch
git push origin <new_name>

# set new remote branch as default remote branch for local branch
git branch --set-upstream-to=origin/<new_name> <new_name>
Sebastian Viereck
sumber
Apa bedanya dengan jawaban yang ada?
Himanshu Tanwar
0
  1. Ganti nama cabang lokal Anda. Jika Anda berada di cabang yang ingin Anda ganti namanya:

    cabang git -m nama baru

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: nama lama nama baru

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

    git push origin -u new-name

Siap!

Anupam Maurya
sumber
0
  • Ganti nama cabang lokal Anda .

Jika Anda berada di cabang yang ingin Anda ganti namanya:

git branch -m new-name

jika Anda tetap di cabang yang berbeda saat ini:

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

Tetap di cabang target dan:

git push origin :old-name new-name
  • Setel ulang cabang upstream untuk cabang lokal nama baru.

Beralih ke cabang target dan kemudian:

git push origin -u new-name
Vitaliy Andrusishyn
sumber