GitHub'da bir dalı yeniden adlandırma


297

Yerel şubemi kullanarak adını değiştirdim

git branch -m oldname newname

ancak bu yalnızca dalın yerel sürümünü yeniden adlandırır. GitHub'da olanı nasıl yeniden adlandırabilirim?



Yönetici ayarlarını kontrol ettiniz mi? Github'daki şu anki projemin şubesi yok ama orada repoyu yeniden adlandırabilirsiniz, böylece şubeleri de yeniden adlandırabilirsiniz.
evanmcdonnal

12
@evanmcdonnal Hayır, Git dalını GitHub sitesinden yeniden adlandıramazsınız.
Andrew Marshall

Bu sorunun cevapları neredeyse evrensel olarak yanlıştır. Soru, bir git dalının nasıl yeniden adlandırılacağı değil, bir github dalının nasıl yeniden adlandırılacağıdır . Github'daki birçok şey bir şubeye bağlıdır, yani herhangi bir cevabın bu şeyleri kapsaması gerekir. Adlandırma Örneğin ana kadar temel
Gman

@gman Değeri için, bu cevaplar OP sorusunun ruhunu yanıtladı gibi görünüyor. OP'nin sorusu, teknik açıdan titiz bir bakış açısından veya şu anda aradığınız ilgili sorundan mükemmel bir şekilde ifade edilmemiş olabilir. Ancak bu soru, git veya GitHub'ın derin teknik geçmişinden gelmiyor. Bu açıdan bakıldığında, bu bir "yeni başlayan" veya temel soru olarak düşünülebilir. Bu nedenle, bu kitle için ifade edilir ve uygun şekilde cevaplanır. Sinir bozucu, emin, ama bu Q düşünüyorum, bu Cevaplar uygun / ilgili, esp öncesi BLM git / Hub kullanım Q'lar için.
SherylHohman

Yanıtlar:


309

Belirtildiği gibi, kullanılan komutlar gerekenden biraz daha ayrıntılı olsa da, Github'daki eski olanı silin ve yeniden itin:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

Basit. Komutları biraz parçalayarak, git push komutu esasen:

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

Bu nedenle, local_branch belirtilmemiş bir push yapmak, esasen "yerel veri havuzumdan hiçbir şey alma ve uzak şube yap" anlamına gelir. Her zaman bunun tamamen kludgy olduğunu düşündüm, ama böyle yapıldı.

Düzenleme: Git 1.7 itibarıyla uzak bir dalı silmek için alternatif bir sözdizimi vardır:

git push origin --delete name_of_the_remote_branch

Düzenleme: Yorumlarda @ void.pointer tarafından belirtildiği gibi

2 itme işlemini birleştirebileceğinizi unutmayın:

git push origin :old_branch new_branch

Bu işlem hem eski dalı silecek hem de yeni dalı silecek

Bu, uzak, orijinal dalı ve yeni şube adını bağımsız değişken olarak alan basit bir takma ada dönüştürülebilir ~/.gitconfig:

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

Kullanımı:

git branchm origin old_branch new_branch

Kabuk komutlarındaki konumsal bağımsız değişkenlerin git'in eski (ön 2.8? Öncesi) sürümlerinde sorunlu olduğuna dikkat edin, bu nedenle takma ad git sürümüne göre değişebilir. Ayrıntılar için bu tartışmaya bakın.


32
Eğer 2 itme işlemleri birleştirebilirsiniz unutmayın: git push origin :old_branch new_branch. Bu işlem hem eski dalı siler hem de yeni dalı siler.
void.pointer

4
Eski şubeyi silmeden önce yeni şubenin itilememesinin bir nedeni var mı? Şahsen silme işleminin, oluşturma işlemi başarılı olduktan sonra, bir şeyler ters giderse gerçekleştiği işlemleri tercih ederim.
jmort253

7
Çalışmıyor. Eski adı ile şubeyi tekrar Github'a koyacaktır.
geoff

1
@AdamParkin 1. git branch -m new_branch(old_branch'ı new_branch olarak yeniden adlandırın) 2. git commit -m 'msg', 3. git push4. Mhmm, old_branch Github'da görünüyor, Google soru ve ben cevabınıza yönlendirildim 5. git push origin :old_branch(silindiğini söylüyor) 6. git push origin new_branch... tamamlar sonra diyor * [new branch] new_branch -> old_branch. Github'a geri dönün ve old_branchtekrar ortaya çıkıyor. Github web kullanıcı arayüzünde silersem, "Geri Yükle" seçeneğim var, bu yüzden new_branch'ı itmek sadece geri yükleniyor gibi görünüyor.
Kcvin

2
Dikkat edilmesi gereken bir şey, şubeyi yeniden adlandırdığınızda, bu çekme isteğine karşı açmış olduğunuz çekme isteklerinin otomatik olarak kapatılacağıdır. Şube yeniden adlandırmak ve sonra tüm çekme isteklerini el ile yeniden açmak zorunda kaldı ....
jmort253

24

Aşağıdaki komutlar benim için çalıştı:

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

Bu işe yarayan kısa cevaptır. BTW, ilk komut cevabında son komut olarak da verilebilir.
Eric Wang

bu cevap git değil github kapsar
gman

1
Aslında, bunu sadece iki kez yaptım ve github üzerinde çalıştı.
spozun

17

Git şube adınızı nasıl değiştirebileceğiniz 3 komut buldum ve bu komut bunu yapmanın daha hızlı yoludur

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

Adım adım ihtiyacınız varsa bu harika makaleyi okuyabilirsiniz

Git Yerel ve Uzak Dallarını Yeniden Adlandırma


1
git push --set-upstreamuzak dalı silmeden önce github uygulamasını kullanarak şube adını yerel olarak değiştirirseniz en önemli kısımdır.
Louis Yang

bu cevap git değil github kapsar
gman

12

Sadece eski dalı kaldırın ve yeni bir dal oluşturun.

Örnek (yalnızca uzak dalı yeniden adlandırma):

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

Ayrıca muhtemelen yerel şubeyi yeniden adlandırmalı ve nereye / nereye itileceğine ilişkin ayarları değiştirmelisiniz.


1
2. komut olmamalı git push origin newname:refs/heads/newnamemı? master ve newname aynı taahhüdü işaret etmeyebilir.
Steve Folly

"master" örnek olarak şimdi değişecektir.
Vi.

Belki iki komutun sırası tersine çevrilmelidir (örn. Önce yeni bir ad yükleyin, bundan sonra eskisini kaldırın)
Vi.

bu cevap git değil github kapsar
gman

@gman, Git-wise olarak yeniden adlandırmamak da Github-wise olarak yeniden adlandırmıyor mu?
Vi.

9

Git yerel ve uzaktaki şubeleri yeniden adlandırma

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

Yeniden adlandırmak istediğiniz şubedeyseniz:

git branch -m new-name

Farklı bir daldaysanız:

git branch -m old-name new-name

2. Eski ad uzak dalını silin ve yeni ad yerel dalını itin.

git push origin :old-name new-name

3. Yeni ad yerel dalı için yukarı akış dalını sıfırlayın.

Şubeye geçin ve ardından:

git push origin -u new-name

Sonuç şu ki

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name

bu cevap git değil github kapsar
gman

Bu git ve GitHub git altında, bu yüzden çalışacak ve benimle ve başkalarıyla birlikte çalışıyor
Abdelrahman Mohamed

Çalışmıyor. Birinci ve ikinci adımları deneyin git branch -m new-name && git push origin :master new-name. Başarısız olacak. Bu cevap sadece git ile ilgili ve github değilse, bu soru diğer birkaç sorunun kopyasıdır ve kapatılmalıdır. Gerçekten github ile ilgili ise, cevap github'u kapsamalıdır. Bu cevap yok.
gman


2

İşte benim için işe yarayan:

1.) Önce yeni şubeyi oluşturun: git push github newname: refs / heads / newname

2.) Github sitesinde, ayarlara gidin ve Varsayılan dalı yeni adla değiştirin

3.) Eski adı sil git push github - eski adı sil


0
  1. Atlassian SourceTree'yi (ücretsiz) indirin .
  2. Deponun yerel klonunu içe aktarın.
  3. Kenar çubuğunda yeniden adlandırmak için dalınızı sağ tıklayın. Bağlam menüsünden "Şubeyi yeniden adlandır ..." seçeneğini seçin ve yeniden adlandırın.
  4. Kökeni itin.

Teşekkürler, ancak şubeye geçmenin yanı sıra içe aktarmam gerekiyordu.
Flash Sheridan

1
bu cevap git değil github kapsar
gman

0

Bu makalede, bunu nasıl gerçekten kolay yapacağınız gösterilmektedir.
1. Yerel bir Git dalını yeniden adlandırmak için, adı değiştirmek için Git branch -m komutunu kullanabiliriz:
git branch -m feature1 feature2
2. Yalnızca uzak Git dalını yeniden adlandırma komutunu arıyorsanız, işte bu "
git push -u origin feature2:feature3
Hayır Bunu yapmadan önce daldaki etiketler git tag.


bu cevap git değil github kapsar
gman

0

Başka bir yol, aşağıdaki dosyaları yeniden adlandırmaktır :

  1. proje dizininizde gezinin
  2. adlandırmak .git/refs/head/[branch-name]için.git/refs/head/new-branch-name
  3. adlandırmak .git/refs/remotes/[all-remote-names]/[branch-name]için.git/refs/remotes/[all-remote-names]/new-branch-name

Hem yerel PC'nizde hem de orijin (ler) / uzak sunucularda kafa ve uzaktan kumandaları yeniden adlandır

Şube artık yeniden adlandırıldı (yerel ve uzak!)


Dikkat

Şimdiki şube adınız eğik çizgi ( /) içeriyorsa git şu dizinleri oluşturur:

geçerli şube adı: "awe/some/branch"

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

şube adı diliyorum: "new-branch-name"

  1. proje dizininizde gezinin
  2. branchdosyayı şuradan kopyala.git/refs/*/awe/some/
  3. içine koy .git/refs/head/.
  4. branchdosyayı hepsinden kopyala.git/refs/remotes/*/awe/some/
  5. onları içeri koy .git/refs/remotes/*/.
  6. tüm açık branchdosyaları yeniden adlandır new-branch-name.
  7. dizin ve dosya yapısının şimdi şöyle görünüp görünmediğini kontrol edin:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. aynısını tüm uzak kaynaklarınızda / sunucularınızda yapın (varsa)
    • bilgi : uzak sunucularda genellikle uzak sunucuda olduğunuz için genellikle hiçbir refs / uzaktan kumanda / * dizini yoktur;) (belki de gelişmiş git yapılandırmalarında mümkün olabilir, ancak bunu hiç görmedim)

Şube artık awe/some/brancholarak new-branch-name(yerel ve uzak!) Olarak yeniden adlandırıldı.

Şube adındaki dizinler kaldırıldı.


Bilgi: Bu yol en iyi olmayabilir, ancak yine de diğer yollarla sorunları olan insanlar için çalışır


bu cevap git değil github kapsar
gman

0

Benim durumumda, yeniden adlandırılan dalı yukarı itmek için ek bir komut gerekiyordu .
git branch --unset-upstream
origin newname

(Yazma kolaylığı için), önce ben git checkout oldname.
Ardından aşağıdakileri çalıştırın:

git branch -m newname
git push origin :oldname veya veyagit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

Bu ekstra adım sadece şubelerime uzaktan izleme ayarladığım için gerekli olabilir . Bu şekilde kontrol ettiğimde, daha sonra sadece tür yerinegit push -u origin oldnameoldnamegit pushgit push origin oldname

Ben yoksa DEĞİL komutunu kullanın git branch --unset-upstreamönce git push origin newbranch, git yeniden oluşturur oldbranch ve kesmeler newbranchiçin origin oldbranch- Niyetim yenerek.


bu cevap git değil github kapsar
gman

@gman Puan alındı. Çözümüm GitHub deposunun yerel git kopyasında yeniden adlandırıldıktan sonra, GitHub'daki bir dalı uzaktan yeniden adlandırmak için git yerel olarak kullanır. Bu nedenle, GitHub web sitesi arayüzü yerine komut satırını kullanmak istediğinizde özel bir çözüm olarak düşünülebilir ve ayrıca güncellenmesini istediğiniz yerel bir klonunuz vardır. Bu ayrımı vurguladığınız ve bu cevabın genel bir çözümden ziyade özel bir durum için olduğunu açıkladığınız için teşekkür ederiz.
SherylHohman

Sorun özellikleri github dalları ile bağlar. Master'ı main olarak yeniden adlandırmayı deneyin; talimatlarınız başarısız olur.
gman

-1

Aşağıdaki komutlar şubeyi yerel olarak yeniden adlandırır, uzak konumdaki eski dalı siler ve yerel dalı yeni uzaktan kumandayı izleyecek şekilde ayarlar:

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

Kod snippet'iniz sorunu çözebilse de, kodunuzun amacının ne olduğunu (sorunu nasıl çözdüğünü) açıklamanız gerekir. Ayrıca, stackoverflow.com/help/how-to-answer
Ahmad F

bu cevap git değil github kapsar
gman

-1

Bu kadar basit . Git şubesini yerel olarak ve uzaktan yeniden adlandırmak için bu snippet'i kullanın (test edildi ve cazibe gibi çalışıyor):

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

Açıklama:

  1. Adımı Yeniden Adlandır:

    Git Referansı: -m veya -M seçeneği ile 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.

  2. Adım Sil:

    Git Referansı: git push origin: experimental Kaynak deposundaki deneysel ile eşleşen bir referans bulun (örn. Refs / heads / experimental) ve silin.

  3. Uzaktan repo Adımında güncelleme (izleme için yukarı referans):

    Git reference: --set-upstream Güncel veya başarılı bir şekilde itilen her dal için bağımsız değişken git-pull [1] ve diğer komutlar tarafından kullanılan yukarı akış (izleme) referansını ekleyin. Daha fazla bilgi için bkz. Branch..mer-config [1].


bu cevap git değil github kapsar
gman

-1

3 basit adım

  • git itme başlangıç ​​noktası

  • git branch -m eski-şube-adı yeni-şube-adı

  • git itme başlangıç ​​noktası


bu cevap git değil github kapsar
gman

It it kez github updates güncellemeleri
Martin Mungai

Çalışmıyor. Tek yaptığı, github'da yeni bir dal yaratmak. Şube adını değiştirmedi. pastebin.com/dDh06HEb
gman

-1

Git dalında git dalını çalıştır -m old_name new_name Bu, yerel repo git push orijininizdeki şube adını değiştirir: old_name new_name Bu, değiştirilen adı uzaktan gönderir ve eski dalı siler git push origin -u new_name Yerel dalı izleyecek şekilde ayarlar uzak dal. Bu sorunu çözer


bu cevap git değil github kapsar
gman
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.