Hem Git yerel hem de uzak şube adını nasıl yeniden adlandırabilirim?


458

Master -> origin / regacy, FeatureA -> origin / FeatureA gibi dört şubem var. Gördüğünüz gibi yanlış isim yazdım.

Bu yüzden uzak bir dal adını yeniden adlandırmak istiyorum (origin / regacy → origin / legacy veya origin / master)

Aşağıdaki komutu deniyorum:

git remote rename regacy legacy

Ancak Git konsolu bana bir hata mesajı verdi.

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

Bu sorunu nasıl çözebilirim?




Yanıtlar:


812

Resim açıklamasını buraya girin


Bunu başarmanın birkaç yolu vardır:

  1. Yerel şubenizi değiştirin ve ardından değişikliklerinizi aktarın
  2. Orijinal adı yerel olarak tutarken şubeyi yeni adla uzaktan kumandaya itin

Yerel ve uzaktan yeniden adlandırma

# 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>

Resim açıklamasını buraya girin


Yalnızca uzak dalı yeniden adlandırma

Kredi bilgileri: 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>

Önemli Not:

git branch -m(Move) komutunu kullandığınızda Git, izleme dalınızı yeni adla da günceller .

git remote rename legacy legacy

git remote renameyapılandırma dosyanızdaki uzak bölümünüzü güncellemeye çalışıyor. Uzaktan kumandayı verilen adla yeni ada yeniden adlandırır, ancak sizin durumunuzda herhangi bir bulamadı, bu nedenle yeniden adlandırma başarısız oldu.

Ama düşündüğünüzü yapmayacak; uzak dalı değil , yerel yapılandırma uzak adınızı yeniden adlandırır . 


Not Git sunucuları, web arayüzünü veya harici programları (Sourcetree vb.) Kullanarak Git dallarını yeniden adlandırmanıza izin verebilir, ancak Git'te tüm işlerin yerel olarak yapıldığını unutmayın, bu nedenle yukarıdaki komutları kullanmanız önerilir. işe.


Yukarıdakilerden sonra hala bir şeyler yapmalısın ve çekmeye çalıştığımda mesaj alıyorum:Your configuration specifies to merge with the ref ''refs/heads/old_name'
Krzysztof Krasoń

6
Eski akış yukarı unset unutma:git checkout <new_name> ; git branch --unset-upstream
Miguel Ping

2
@ MiguelPing'in yorumu önemlidir. Bir şubeyi yeniden adlandırmaya çalışırken, zaten github'a, silmeye, yerel olarak yeniden adlandırmaya ve eski adın yeniden kullanılmasına neden olan sonuçları yeniden itmeye çalıştım. Eğer --unset-upstreamtekrar itmeden önce, istediğim gibi çalışır.
Adam Tuttle

1
Uzaktan kumandadaki eski ad dalında açık PR'lerin otomatik olarak kapanmasını önlemenin bir yolu var mı? Gitlab'de bununla yüzleşti, burada eski şube adındaki PR, orijine itildikten sonra kapatıldı.
Himanshu Tanwar

142

Bir dalı yanlış adlandırdıysanız ve bunu uzak depoya aktardıysanız, bu dalı yeniden adlandırmak için şu adımları izleyin ( bu makaleye göre ):

  1. Yerel şubenizi yeniden adlandırın:

    • Yeniden adlandırmak istediğiniz şubedeyseniz:
      git branch -m new-name

    • Farklı bir şubedeyseniz:
      git branch -m old-name new-name

  2. old-nameUzak dalı silin ve new-nameyerel dalı itin :
    git push origin :old-name new-name

  3. Yeni ad yerel dalı için yukarı akış dalını sıfırlayın :
    Dala geçin ve ardından:
    git push origin -u new-name


1
İlk 2 adımdan sonra, geçerli şube hakkında bir hata iletisi alırsanız, uzak depodaki varolmayan bir dalı işaret eder, 3. adım bunu düzeltir
Kevin Hooke

1
@ Dr1Ku Bir dalı silmek için git push <remote> --delete old_name& arasındaki farkı bilmeniz gerekir git push origin :old-name new-name.
Ashutosh Chamoli

BitBucket kullanıcıları: Yeniden adlandırılıyorsa 2. Adımdaki hatayı düzeltin master, Repo Ayrıntıları'nda varsayılan dalı yeni dala ayarlayın. Hata: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

diğerleri arasında en kolay
Abdulla Nilam

37

Doğrudan bir yol var gibi görünüyor:

Gerçekten dalları uzaktan yeniden adlandırmak istiyorsanız (herhangi bir yerel dalı yeniden adlandırmadan) bunu tek bir komutla yapabilirsiniz

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

Git'te şubeleri uzaktan yeniden adlandırma

Daha fazla ayrıntı için orijinal cevaba bakınız.


1
Git'te çalışmadı 2.20.1Eski dal silindi , ancak yeni dal oluşturulmadı.
Paul Razvan Berg

26

Aşağıdaki şekilde de yapılabilir.

İlk önce yerel şubeyi, ardından uzak şubeyi yeniden adlandırın.

Yerel şubeyi yeniden adlandırma:

Başka bir şubeye giriş yaptıysanız,

git branch -m old_branch new_branch 

Aynı şubeye giriş yaptıysanız,

git branch -m new_branch

Uzak dalı yeniden adlandırma:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch

5

Zaten yanlış adı uzaktan kumandaya ittiyseniz, aşağıdakileri yapın:

  1. Yeniden adlandırmak istediğiniz yerel şubeye geçin

    git checkout <old_name>

  2. Yerel şubeyi yeniden adlandırma

    git branch -m <new_name>

  3. <new_name>Yerel dalı itin ve yukarı doğru dalı sıfırlayın

    git push origin -u <new_name>

  4. <old_name>Uzak dalı silme

    git push origin --delete <old_name>

Bu, bu makaleye dayanıyordu .


4

Mevcut dalınızı yeniden adlandırmak için Basit bir Snippet eklemek (yerel ve başlangıç ​​noktası):

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

Git Dokümanlarından Açıklama :

git branch -m veya -M seçeneği, olarak yeniden adlandırılacaktır. Karşılık gelen bir reflog varsa, eşleşecek şekilde yeniden adlandırılır ve şube yeniden adlandırmasını hatırlamak için bir reflog girişi oluşturulur. Varsa, yeniden adlandırmayı zorlamak için -M kullanılmalıdır.

Özel refspec: (veya +: hızlı ileri olmayan güncellemelere izin vermek için) Git'i "eşleşen" dalları zorlamaya yönlendirir: yerel tarafta bulunan her dal için, aynı adda bir dal zaten varsa uzak taraf güncellenir uzak tarafta.

--set-upstream Kurulumun izleme bilgileri, yukarı akış dalı olarak kabul edilir. Hayır belirtilirse, varsayılan olarak geçerli dalı değiştirir.


3

Doğrudan bir yöntem yok,

  1. Yerel Şubeyi Yeniden Adlandır ,

    Mevcut şubem efendi

    git branch -m master_renamed #master_renamed yeni ustanın adı

  2. Uzak dalı sil,

    git push origin --delete master #origin uzak_adı

  3. Yeniden adlandırılan dalı uzaktan kumandaya itin,

    git push origin master_renamed

Bu kadar...


Güzel ve basit ve sadece 3 adım. git push -u origin master_renamed
Önerebileceğim

2

Bu, yerel dalı üç basit adımda yeniden adlandırmadan bile yapılabilir:

  1. GitHub'daki deponuza gidin
  2. Yeniden adlandırmak istediğiniz eski daldan yeni bir dal oluşturun
  3. Eski dalı sil

0

Bu git takma adını kullanıyorum ve iş otomatik olarak yapıyor:

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;'

Kullanım: git move FROM_BRANCH TO_BRANCH

Master, orijin vb. Varsayılan adlara sahipseniz çalışır. İstediğiniz gibi değiştirebilirsiniz ancak size fikir verir.


0

Yerel ve uzak dalı yeniden adlandırmak için aşağıdaki görevi yapmak zorunda kaldım:

# 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>

Mevcut cevaptan farkı nedir?
Himanshu Tanwar

0
  1. Yerel şubenizi yeniden adlandırın. Yeniden adlandırmak istediğiniz şubedeyseniz:

    git branch -m yeni ad

Farklı bir şubedeyseniz:

git branch -m old-name new-name
  1. Eski ad uzak dalını silin ve yeni ad yerel dalını itin.

    git push kökenli: eski ad yeni ad

  2. Yeni ad yerel dalı için yukarı akış dalını sıfırlayın. Şubeye geçin ve ardından:

    git push origin -u yeni ad

Her şey hazır!


0
  • Yerel şubenizi yeniden adlandırın .

Yeniden adlandırmak istediğiniz şubedeyseniz:

git branch -m new-name

şu anda farklı bir dalda kalırsanız:

git branch -m old-name new-name
  • Eski ad uzak dalını silin ve yeni ad yerel dalını itin.

Hedef dalda kalın ve:

git push origin :old-name new-name
  • Yeni ad yerel dalı için yukarı akış dalını sıfırlayın.

Hedef şubeye geçin ve ardından:

git push origin -u new-name
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.