Yerel Git dalını nasıl yeniden adlandırabilirim?


Yanıtlar:


13734

Herhangi bir dalı işaret ederken bir dalı yeniden adlandırmak istiyorsanız, şunları yapın:

git branch -m <oldname> <newname>

Geçerli dalı yeniden adlandırmak istiyorsanız, şunları yapabilirsiniz:

git branch -m <newname>

Bunu hatırlamanın bir yolu , dosyaları nasıl yeniden adlandırdığınız -m"taşıma" (veya mv). Takma ad eklemek de yardımcı olabilir. Bunu yapmak için aşağıdakileri çalıştırın:

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

Windows veya başka bir büyük / küçük harfe duyarlı olmayan dosya sistemindeyseniz ve adında yalnızca büyük harf kullanımı değişiklikleri varsa, kullanmanız gerekir -M, aksi takdirde git zaten şube var hata atar :

git branch -M <newname>

87
Gerçekten bilmek istediğim, eğer bunu bastığınızda /
iterseniz

181
@PandaWood: ittiğinizde yeni dalı ekler, ancak eski dalı silmez. Eğer kullanırsanız git push -f --mirror, o zaman uzaktan kumandadaki şube adlandırmak, ancak uzaktan mevcut depo bir kopyası olduğu basitçe ise, yalnızca bu yöntemi kullanmalısınız. Ayrıca bu soruya bakın: stackoverflow.com/questions/1526794/git-rename-remote-branch
siride

19
@PandaWood, nasıl push.defaultyapılandırıldığına bağlıdır . Varsayılan olarak ( matching) adı eşleşen bir uzaktan kumandaya yönlendirilir. Yapmanız gerekecek git push origin <newname>:<oldname>veya yeni bir uzak dal oluşturacaksınız. Ancak, push.defaultolarak ayarlanırsa upstream, o zaman yapabilirsiniz push origin headve işler uzaktan kumandadaki eski ada gider.
Erin Stanfill

13
@ NightOwl888: -m mvdosyaları yeniden adlandırmak için kullanılan Unix kuralını izleyerek -m büyük olasılıkla “move” kısaltmasıdır . Bunun nedeni, dizin tabanlı bir inode dosya sisteminde taşıma ve yeniden adlandırma işlemlerinin tamamen eşdeğer olmasıdır.
siride

51
-mSeçeneğin uzun adı --move, ör git branch --move master. Geçerli dalı "master" olarak adlandırılacak şekilde yeniden adlandırır.
robenkleene

445
git branch -m old_branch_name new_branch_name

Yukarıdaki komut, şube adınızı değiştirecektir, ancak yeniden adlandırılan dalı kullanırken çok dikkatli olmalısınız, çünkü yine de varsa, onunla ilişkili eski yukarı akış şubesine atıfta bulunacaktır.

Yerel şubeniz new_branch_name (örnek adı) olarak yeniden adlandırıldıktan sonra bazı değişiklikleri master'a aktarmak istiyorsanız:

git push origin new_branch_name:master (artık değişiklikler ana şubeye gidecek, ancak yerel şube adınız new_branch_name)

Daha fazla ayrıntı için bkz . " Git'te yerel şube adınızı yeniden adlandırma ".


326

Mevcut dalınızı yeniden adlandırmak için:

git branch -m <newname>

159
Yalnızca büyük / küçük harf kullanımını değiştiriyorsanız yeniden adlandırmak için -M'yi kullanmanız gerekir, çünkü git size bu dalın zaten var olduğunu söyleyecektir.
cjspurgeon

289

Şubeyi yeniden adlandırma adımları şunlardır:

  1. Yeniden adlandırılması gereken şubeye geçin
  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): Komutu çalıştırdığınızdan git statusve yeni oluşturulan dalın eskisine değil, kendi başvurusunu gösterdiğinden emin olun . Eski şubeye referans bulursanız, yukarı akış ayarını aşağıdakileri kullanarak ayarlamanız gerekir:

git branch --unset-upstream

1
Hangi adımda yukarı akış kesilir? 4. adımdan önce?
Cyclonecode

1
Bu, yeniden adlandırma işlemini doğru bir şekilde tamamlamak için tüm süreci açıkladığı için en iyi cevaptır
Chris Halcrow

212

Şubenizi yeniden adlandırdığınızda, dalın adını değiştirin. Sonra yeni şeyler geliyor ve onu silmek ve yeni bir tane oluşturmak yerine aynı dalda geliştirmek istiyorsunuz.

Deneyimlerime göre, Git'te yerel ve uzak bir dalı yeniden adlandırmak için aşağıdaki adımları gerçekleştirmelisiniz.

Birden Fazla Durumdan Alıntı Yapma - Git'te yerel ve uzak bir dalı yeniden adlandırın

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

git push origin -u new-name

1
Bu benim için daha iyi çalıştı. Burada 2 adım bana aşağıdaki hataları verdi: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
Komutu çalıştırırken sorun git push origin :old-name new-namemu var?
trungk18

Evet tam olarak (üzgünüm "2. adım" demek istedim, "2 adım" değil - yorgun)
Anto

116

Şimdiye kadar cevaplar doğru, ancak işte bazı ek bilgiler:

Şube '-m' (hareket) ile güvenli bir şekilde yeniden adlandırılabilir, ancak '-M' ile dikkatli olmak gerekir, çünkü zaten aynı adı taşıyan mevcut bir şube olsa bile yeniden adlandırmayı zorlar. İşte 'git-branch' kılavuz sayfasından alıntı:

-M veya -M seçeneği <oldbranch>ile yeniden adlandırılacaktır <newbranch>. Eğer <oldbranch>karşılık gelen reflog vardı, maç için yeniden adlandırıldı <newbranch>ve reflog giriş dal yeniden adlandırma hatırlamak oluşturulur. Varsa <newbranch>, yeniden adlandırmayı zorlamak için -M kullanılmalıdır.


2
Üzerine yazılan şubeye ne olur?
Kevin Dice

Yeni ad / dal tarafından üzerine yazılır. Örneğin git'de aşağıdaki dallarınız varsa: master b1 <- 'git branch -M b2' yaptıktan sonra geçerli dal b2 yalnızca sahip olacaksınız: master b2 <- geçerli dal b1 kaybolacak ve isterseniz kurtarmak onu hash tarafından kontrol etmelisiniz. 'Git reflog' yazarak görebilirsiniz. Şerefe.
Vanchev

-MBayrak da sadece değişen örneğin, şube adının durumuyla düzelterek eğer bir yeniden adlandırma zorlamak için yararlıdır myBranchiçin MyBranch. (İle -m, git döner fatal: A branch named 'MyBranch' already exists.)
Jon Schneider

92

1. Yeniden adlandır

Şimdiki dalınızsa,

git branch -m new_name

Yeniden adlandırmak istediğiniz başka bir dalsa

git branch -m old_name new_name

2. Yeni bir uzak dalı takip edin

- Şubeniz itilmişse, yeniden adlandırdıktan sonra uzak Git deposundan silmeniz ve yeni yerelinizden yeni bir uzak dalı izlemesini istemeniz gerekir:

git push origin :old_name
git push --set-upstream origin new_name

74

Aptalca tireyle başlayarak bir şube adlandırdım ve sonra efendiye baktım. Şubemi silmek istemedim , içinde çalıştım.

Bunların hiçbiri işe yaramadı:

git checkout -dumb-name

git checkout -- -dumb-name

"s, 's ve \s de yardımcı olmadı. git branch -mçalışmıyor.

Sonunda bunu nasıl düzelttim. Çalışma kopyanızın .git / refs / kafalarına gidin, "-dumb-name" dosya adını bulun, şubenin karmasını alın. Sonra bu kontrol, aklı başında bir isim ile yeni bir şube yapmak ve eski olanı silin.

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name

8
Dosyayı sadece refs / heads olarak yeniden adlandıramaz mıydınız?
android.weasel

Aynen. Bu sihri yapmak için dizin yapısını kazmanız gerekiyorsa, sonuna kadar gidin ve 'mv - -dumb-name brilliant-name' yapın 'git branch -av' ve bir dizin yapısı göreceksiniz. .git / ref. Ya da karmaları doğrudan görmek için 'grep -R ^ .git / refs' olabilir.
Dave X

2
Muhtemelen kullanmış olabilirsinizreflog
Code Whisperer

Dürüst olmak gerekirse, gitmek istediğiniz yol buysa, (IMO kafa karıştırıcı ve ne yaptığınızı bilmiyorsanız potansiyel olarak tehlikeli) ilk başta .git dizini ile dolaşmaktan kaçınır ve sadece bazılarıyla yapın bazı "git log" ayrıştırma ile normal komutlar (dalları göstermek ve yeni bir daldan hangi shasum'dan çıkış yapmak istediğinizi bulmak için uygun bayrakları kullanarak) ve sonra yapın. Ardından, wonky adlı dalı kaldırın. Ben hor o git bazı şeyler yapmak onun iç işleyişini tüm anlamamız gerekir ısrar, ama büyük ölçüde takdir edebilirsiniz şeylerden.
Jon V

2.10.1 ve sonraki sürümlerinde kötü bir ada sahip bir şube oluşturmak daha zor. Bir şekilde yaparsanız, dallarınızın kısa karma sürümünü almak için git branch -v'yi kullanabilirsiniz (uzaktan kumanda için -r ekleyin). Daha sonra ihtiyacınız varsa tam karma değerini almak için git rev-parse <shorthash> kullanabilirsiniz.
Dexter Evi

67

Bir şubeyi yerel olarak yeniden adlandırmak için:

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

Şimdi bu değişiklikleri uzak sunucunuzda da yaymanız gerekecek.

Silinen eski dalın değişikliklerini itmek için:

git push origin :[old-branch]

Yeni şube oluşturma değişikliklerini itmek için:

git push origin [new-branch]

57

remoteGitHub'ın yanı sıra addaki değişikliği çoğaltmak için sadece üç adım :

Aşama 1 git branch -m old_branchname new_branchname

Adım 2 git push origin :old_branchname new_branchname

Aşama 3 git push --set-upstream origin new_branchname


2
Ayrıca bir ek şey yapmak zorunda kaldım: git push --set-upstream origin new_branchname@Nomade cevapta bahsedilen
IbrahimShendy

2
Adım 3 gerekli değildir. Adım 2'den sonra her şey günceldi
Dev

@Dev her durumda Dev, bitbucket ve codecommit kullandığımdan beri yakın zamanda güncellemem gerekiyordu, 3. adım gerekli
Harry_pb

40

Bu komutu kullanarak dalı yeniden adlandırın:

git branch -m [old_branch_name] [new_branch_name]

-m: Şube adını değiştirir / taşır. Zaten bir şube varsa, bir hata alırsınız.

Zaten bir şube varsa ve o şube ile yeniden adlandırmak istiyorsanız, şunu kullanın:

 git rename -M [old_branch_name] [new_branch_name]

Yardım hakkında daha fazla bilgi için terminalde şu komutu kullanın:

git branch --help

veya

man git branch

40

Gelişmiş Git kullanıcıları aşağıdakileri kullanarak manuel olarak yeniden adlandırabilir:

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

34
  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
  1. Eski ad uzak dalını silin ve yeni ad yerel dalını itin.

git push origin :old-name new-name

  1. 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

Veya bunu hızlı bir şekilde yapmak için şu 3 adımı kullanabilirsiniz:

# Şubeyi yerel olarak yeniden adlandır

git branch -m old_branch new_branch  

# Eski uzak dalı sil

git push origin :old_branch  

# Yeni şubeyi itin, yeni şubeyi izlemek için yerel şubeyi ayarlayın

git push --set-upstream origin new_branch   

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


bu benim için çalışıyor
Vazgen Manukyan

26

Üç adım: Terminalinizin içinde arayabileceğiniz ve şube adını değiştirebileceğiniz bir komut.

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

Daha fazlasına ihtiyacınız varsa: adım adım Git Git Adını Değiştirme Bu konuda iyi bir makale.


25

Muhtemelen başkaları tarafından belirtildiği gibi, bu, şube adlandırmada bir vaka uyuşmazlığı olacaktır.

Böyle bir durumunuz varsa, Windows'da olduğunuzu tahmin edebilirim ki bu da sizi şunlara yönlendirir:

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

O zaman bir ara adım atmalısınız:

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

Başka bir şey yok.


1
Bu durum aynı zamanda bir Mac üzerinde oluşabilecek geldiğini hatırlatırız da dosya sisteminde (istisnai rahatsız edici) vaka duyarsız.
Jon V

Alternatif olarak, kullanabilirsiniz -Myerine -mtek bir adımda "muhafaza düzeltme" yeniden adlandırma bu tür yapmak.
Jon Schneider

23

Soruya özel olarak cevap vermeye çalışıyorum (en azından başlık).

Ayrıca yerel şubeyi yeniden adlandırabilirsiniz , ancak uzaktan kumandadaki eski adı izlemeye devam eder.

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

Şimdi, çalıştırdığınızda git push, uzaktan old_branchref yerel ile güncellenir new_branch.

Bu yapılandırmayı bilmeniz ve hatırlamanız gerekir . Ancak, uzak dal adı için seçiminiz yoksa, ancak hoşunuza gitmiyorsa (oh, yani, beğenmemek için çok iyi bir nedeniniz var !) Ve daha net bir tercihiniz varsa yararlı olabilir. yerel şubenizin adı.

Getirme yapılandırması ile oynarken, yerel uzaktan referansı yeniden adlandırabilirsiniz. yani bir sahip refs/remote/origin/new_branchdalına ref işaretçi, yani aslında old_branchilgili origin. Ancak, zihninizin güvenliği için bunu son derece caydırıyorum.


22

Şubeyi yerel olarak değiştirmek oldukça kolaydır ...

Adını değiştirmek istediğiniz şubedeyseniz, bunu yapın:

git branch -m my_new_branch

Aksi takdirde, adı değiştirmek istediğiniz daldamaster veya başka bir daldaysanız , şunları yapmanız yeterlidir:

git branch -m my_old_branch my_new_branch

Ayrıca, bunu bir komut satırında eylem halinde göstermek için aşağıdaki görüntüyü oluşturuyorum . Bu durumda, masterdaldasınız, örneğin:

Şube adını yerel olarak değiştirme



20

Geçerli dalı yeniden adlandırmak için (ayrılmış HEAD durumu hariç) bu takma adı da kullanabilirsiniz:

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

18

Başka bir seçenek de komut satırını hiç kullanmamaktır. SourceTree gibi Git GUI istemcileri, bunun gibi soruların Stack Overflow'da en çok görüntülenen sorular arasında olmasına neden olan sözdizimsel öğrenme eğrisinin / ağrısının çoğunu alır.

SourceTree'de, soldaki "Dallar" bölmesinde herhangi bir yerel dalı sağ tıklatın ve "Yeniden adlandır ..." seçeneğini belirleyin.


5
Ben buna acı demezdim. Git komutunun kullanımı çok kolaydır, bu cevabı gördükten sonra muhtemelen bir daha asla geri gelmeyeceksiniz. Sorun daha çok, bu yüzden git komut satırının belgeleri yeterince sezgisel değil.
Nearoo

1
Doğru ama SourceTree ile belgeleri kontrol etme konusunda endişelenmem gerekmiyor. Her şey genellikle sezgiseldir - sadece sağ tıklayın ve seçeneklerin ne olduğunu görün. (BTW Onlarla hiçbir şekilde bağlantılı değilim - tıpkı araç gibi!)
Steve Chambers

17

Bunu yapmanın basit bir yolu:

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

Daha fazla bilgi için, bkz bu .


15

Şubeyi uzak bir sunucuya göndermek istemediğiniz için bu örnek faydalı olacaktır:

Diyelim ki "my-hot-feature" adında mevcut bir dalınız var ve bu adı "feature-15" olarak yeniden adlandırmak istiyorsunuz.

İlk olarak, yerel şubenizi değiştirmek istiyorsunuz. Bu daha kolay olamazdı:

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

Daha fazla bilgi için Git'te bir Şubeyi Yerel Olarak ve Uzaktan Yeniden Adlandırma sayfasını ziyaret edebilirsiniz .


13

Git sürüm 2.9.2

Bulunduğunuz yerel şubenin adını değiştirmek istiyorsanız:

git branch -m new_name

Farklı bir dalın adını değiştirmek istiyorsanız:

git branch -m old_name new_name

Farklı bir dalın adını zaten var olan bir adla değiştirmek istiyorsanız:

git branch -M old_name new_name_that_already_exists

Not: Son komut yıkıcıdır ve dalınızı yeniden adlandıracaktır, ancak dal adlarının benzersiz olması gerektiğinden eski dalını bu adla kaybedersiniz ve bu işlemleri gerçekleştirirsiniz.


11

Geçerli dalın adını değiştirmek istiyorsanız, şunu çalıştırın:

git branch -m [old_branch] [new_branch]

Eski uzak dalı silmek istiyorsanız, şunu çalıştırın:

git push origin :[old_branch]

Eski uzak dalı silmek ve yeni bir uzak dal oluşturmak istiyorsanız, şunu çalıştırın:

git push origin :old_branch new_branch

6

Git şube yeniden adlandırma aşağıdakiler kullanılarak yapılabilir:

  1. git branch -m oldBranch newBranch

  2. git branch -M oldBranch ExistingBranch

-M ve -M arasındaki fark :

-m: -m kullanarak şubenizi mevcut bir şube adıyla yeniden adlandırmaya çalışıyorsanız . Şubenin zaten var olduğunu söyleyen bir hata oluşturur. Benzersiz bir ad vermeniz gerekiyor.

Fakat,

-M: bu, mevcut olsa bile, belirli bir adla yeniden adlandırmayı zorlamanıza yardımcı olacaktır. Böylece mevcut bir şube tamamen onun üzerine yazacak ...

İşte bir Git terminali örneği,

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$

5

Git GUI kullanıcıları için bu daha kolay olamazdı. Git GUI'de, Branch: Rename (Yeniden Adlandır) menü öğesinden oluşturulan "Şubeyi Yeniden Adlandır" iletişim kutusundaki açılır listeden dal adını seçin. Açılır listeyi nerede bulacağımı vurguladım.

Yerel Git dalını yeniden adlandırma


3

Eğer istersen:

  • Git deposunu yeniden adlandırın, çalıştırın: git branch -m <oldname> <newname>
  • Eski şubeyi sil: git push origin: old-name new-name
  • Şunları kullanarak taahhüt edin: git commit <newname>
    • ve ardından şunu kullanarak itin: git push origin new_branch_name:master
  • Durumu kontrol etmek istiyorsanız şunu kullanın: git status
  • Eğer kontrol etmek istiyorsanız şunu kullanın: git checkout

3

Önceki yanıtların tümü hakkında konuşuyor git branch -m. Tabii ki kullanımı kolay, ama benim için başka bir Git komutunu hatırlamak biraz zor olabilir. Bu yüzden aşina olduğum komutla işi yapmaya çalıştım. Evet, tahmin edebilirsiniz.

Ben kullanıyorum git branch -b <new_branch_name>. Ve şimdi eski dalı kaydetmek istemiyorsanız git branch -D <old_branch_name>, kaldırabilirsiniz.

Biraz sıkıcı olabileceğini biliyorum, ama anlaması ve hatırlaması daha kolay. Umarım size yardımcı olur.


Komutları hatırlamakta sorun yaşıyorsanız, kendiniz için kabuk veya git diğer adları ayarlayabilirsiniz.
sean

çok farklı makinelerde çalıştırma komutuna ihtiyacım olursa ne olacak?
Dai Kaixian

1

PhpStorm'da:

VCS → Git → Dallar ... → Yerel Dallar → _your_branch_ → Yeniden adlandır


0

Tek yapmanız gereken üç adım:

  1. .Git / refs / heads altındaki eski şubeye yeni isim verin
  2. .Git / logs / refs / heads altındaki eski şubeye yeni bir ad verin
  3. Yeni şube adınıza yönlendirmek için .git / HEAD'i güncelleyin
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.