Git'te şube adlarını değiştirin


103

Bu soruyu sormanın birden fazla yolu olabilir, işte sorunun açıklaması. Usta üzerinde çalışıyordum ve bazı şeyler yaptım ve sonra bu çalışmayı beklemeye almaya karar verdim. Birkaç taahhüdü yedekledim ve sonra boktan işime başlamadan önce dallandım. Pratik olarak bu iyi çalışıyor, şu anda ana geliştirme dalım olarak farklı bir şubem var. Etrafta bir şeyleri nasıl değiştirebileceğimi merak ediyorum, bu yüzden tekrar usta üzerinde çalışıyorum ama gereksiz işlerim yok ve iş farklı bir dalda dedi.

Bunun sorulabileceği / çözülebileceği bazı yollar: Ana şubemi başka bir şeye nasıl yeniden adlandırabilirim ve sonra başka bir şeyi ustalaşmak için nasıl yeniden adlandırabilirim? Master'ı nasıl yedekleyebilirim ve ardından geçmişte yedeklediğim tüm kayıtların farklı bir dalda olmasına neden olabilirim?

Tüm (hızlı) cevaplar için teşekkürler! Hepsi iyi.

Yanıtlar:


144

Diğer yorumlara ek olarak, git-branch'a -m (taşı) anahtarını yararlı bulabilirsiniz. Eski ustanızı başka bir şeyle yeniden adlandırabilir, ardından yeni şubenizi uzmanlaşmak için yeniden adlandırabilirsiniz:

git branch -m master crap_work
git branch -m previous_master master

İş akışınıza bağlı olarak, .git / config'deki herhangi bir şube referansını değiştirmek isteyebilirsiniz. Master'ın hala senkronize olması [branch "crap_work"]için okumayı değiştirdim . Elbette, iki deponun durumu, bu hala mantıklıydı. [branch "master"]origin/master
Eponymous

3
Bu, uzak depodaki dalları yeniden adlandırmaz, yalnızca yerel depoda.
smohadjer

1
@smohadjer Uzaktan kumandaları yeniden adlandırmak için git push -uf origin masterve yaparsınız git push -u origin crap_work.
zyy

31

Bunun gibi sorunları önlemek için farklı bir geliştirme stratejisi düşünmeniz gerektiğini düşünüyorum. Benim için en çok işe yarayan şey, asla doğrudan ana şubemde geliştirme yapmamaktır. Yaptığım değişikliklerden bağımsız olarak, her zaman yeni kod için yeni bir şube oluşturuyorum:

git checkout -b konu / konu_adı ana

Oradan değişiklikleri herkese açık havuzlara aktarabilirim:

git push pu konu / konu_adı

ya da sonunda onu ana şubemle birleştiririm:

git checkout master && git merge topic / topic_name

Zaman içinde gerçekten daha eski bir noktaya geri dönmeniz ve bunu ana biriminiz olarak ayarlamanız gerekiyorsa, mevcut şubeyi başka bir şeye yeniden adlandırabilir ve ardından ustanız olmak için eski bir sürümü kontrol edebilirsiniz:

 git şube -m ana önemsiz
 git co -b usta old_sha1_value

Bu iyi bir ilkedir. Ve bir düşünün, bunun başka yerlerde uygulandığını gördüm. Teşekkürler.
Rimian

14

Başlayın, masteradlı bir dal oluşturun in-progress, ardından masterönceki bir işleme sıfırlayın .

$ git branch in-progress
$ git reset --hard HEAD^

1
Bunun reddedilmesi için bir neden göremiyorum. -M şubesini öğrenmeden ve ustanın bir şubenin kalıcı adı olarak değişmez bir şekilde bağlı olmadığını fark etmeden önce bunu birkaç kez yaptım.
skiphoppy

7

Bu nispeten kolaydır:

git checkout -b fake_master master # fake_master now points to the same commit as master
git branch -D master               # get rid of incorrect master
git checkout -b master real_master # master now points to your actual master
git checkout master                # optional -- switch on to your master branch

1
Yeap, sonuncusu tamamen isteğe bağlıdır - git checkout -bbir dal oluşturur ve onu aktif hale getirir.
BorisOkunskiy

0

Bu, ustanızı tek adımda herhangi bir noktaya ayarlayacaktır:

git checkout -B master new_point
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.