Git'te başka bir şubeden dal oluşturma


989

İki şubem var: master ve dev

Geliştirici dalından bir "özellik dalı" oluşturmak istiyorum .

Şu anda şube dev, ben:

$ git checkout -b myfeature dev

... (biraz iş)

$ git commit -am "blablabla"
$ git push origin myfeature

Ancak, şubelerimi görselleştirdikten sonra:

--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**

Demek istiyorum ki şube birleşmiş gibi görünüyor ve nedenini anlamıyorum ...

Neyi yanlış yapıyorum?

Başka bir şubeden nasıl ayrıldığınızı ve özellik dalı için uzak depoya nasıl geri döndüğünüzü lütfen açıklayabilir misiniz?

Bütün bunlar, burada açıklanan gibi bir dallanma modelinde .

Yanıtlar:


1431

Gönderdiğiniz bağlantıdaki yöntemi beğendiyseniz Git Flow'a göz atın .

Bu iş akışı için oluşturduğu bir dizi komut dosyası.

Ama soruyu cevaplamak için:

$ git checkout -b myFeature dev

MyFeature dalını geliştirici dışında oluşturur. İşini yap ve sonra

$ git commit -am "Your message"

Şimdi değişikliklerinizi geliştirmede hızlı ileri sarmadan birleştirin

$ git checkout dev
$ git merge --no-ff myFeature

Şimdi değişiklikleri sunucuya aktarın

$ git push origin dev
$ git push origin myFeature

Ve nasıl istediğini göreceksin.


32
myFeaturebirleştirildikten sonra itmenin önemi devnedir?
Alexander Suraphel

3
@spartacus myFeatureŞube birleşmeden önce sunucuya gönderildiyse, hiçbir şey yapılmaz . Ancak myFeaturehenüz sunucuya aktarılmazsa ve sunucuda görünmesini istiyorsanız, appart'ı itmeniz gerekir.
xOneca

15
olan git checkout -b myFeature devbu 3 komutla aynı: git checkout devdaha sonra git branch myFeature, sonra git checkout myFeature?
Kevin Meredith

3
Öyle ya da olmalı. Farklı bir şey görüyor musun?
Abizern

33
Diğer yeni başlayanlar için açıklığa kavuşturmak için, bu bir --no-ffbirleşme gibi görünüyor
A__

407

Git'teki mevcut dallardan herhangi birinden yeni bir dal oluşturmak istiyorsanız, seçenekleri izleyin.

İlk olarak, yeni bir şube oluşturmak istediğiniz şubeyi değiştirin / ödünç alın. Örneğin, aşağıdaki şubelere sahipseniz:

  • usta
  • dev
  • branch1

Dolayısıyla, "branch1" adlı dalın altında "subbranch_of_b1" adlı yeni bir dal oluşturmak istiyorsanız, aşağıdaki adımları izleyin:

  1. Ödeme yapın veya "branch1" olarak değiştirin

    git checkout branch1
    
  2. Şimdi aşağıdaki komutu kullanarak "branch1" altında "subbranch_of_b1" adlı yeni dalınızı oluşturun.

    git checkout -b subbranch_of_b1 branch1
    

    Yukarıdakiler , şube dalı1 altında subbranch_of_b1 adlı yeni bir şube oluşturur ( HEAD şu anda işaret ettiğinden yukarıdaki komutta zorunlu değildir, ancak farklı bir daldaysanızbranch1 bunu kesin olarak yapabilirsiniz).

  3. Artık subbranch_of_b1 ile çalıştıktan sonra yerel olarak veya uzaktan taahhüt edebilir ve itebilir veya birleştirebilirsiniz.

Başka bir Dal Altında Dal Oluşturmanın Örnek Bir Grafik Çizimi

subbranch_of_b1 öğesini uzaktan kumandaya itin

 git push origin subbranch_of_b1 

7
subbranch_of_b1 uzaktan nasıl itilir?
user269867

13
@ user269867: "git push origin subbranch_of_b1" bu işi sizin için yapacak.
Praveen George

4
Şimdi, master'a değişiklikleri itersem, bu otomatik olarak branch1'de gerçekleşir mi?
Usta Yoda

2
HEAD şu anda işaret ettiğinden yukarıdaki komuttaki branch1'in zorunlu olmadığını unutmayın, aradığım şey bu olsa da farklı bir
daldaysanız

10
Buraya git checkout -b some-branchkestirme olup olmadığını merak etmeye geldim git checkout -b some-branch master. Bunun git checkout -b some-branchiçin kestirme olduğu ortaya çıktıgit checkout -b some-branch <current_active_branch>
Frank Henard

45

Şube Oluştur

  • Ana dal kullanıma alındığında dal oluşturun. Burada master'daki taahhütler, oluşturduğunuz şubeyle senkronize edilecektir.

    $ git branch branch1

  • Branch1 kullanıma alındığında şube oluşturun. Burada branch1'deki taahhütler branch2 ile senkronize edilecek

    $ git branch branch2


Şube Ödeme

git checkout komut dallarını değiştirin veya çalışan ağaç dosyalarını geri yükleyin

  • $ git checkout branchname

Şube Yeniden Adlandırma

  • $ git branch -m branch1 newbranchname

Şube Silme

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete ( birleştirilmiş durumu kontrol etmeden silmeyi zorla )

Şube Oluştur ve Değiştir

  • $ git checkout -b branchname

Tamamen dahil olan şubeler

  • $ git branch --merged


************************** Dal Farkları [git diff branch1..branch2] ************** **********

Çok satırlı fark
  • $ git diff master..branch1
Tek satır farkı
  • $ git diff --color-words branch1..branch2

1
Ayrıca şube yeniden adlandırıldıktan sonra git push origin :old-name new-name, eski ad uzak dalını silmek ve yeni ad yerel dalını itmek için kullanın.
'19

13

devŞube üzerinde eşzamanlı çalışma yapın . Olan şey, senaryonuzda özellik dalının geliştirici dalının ucundan ileriye doğru hareket etmesi, ancak geliştirici dalının değişmemesi. Düz bir çizgi olarak çizmek daha kolaydır, çünkü ileri hareket olarak düşünülebilir. Bunu dev üzerinde A noktasına getirdin ve oradan paralel bir yolda devam ettin. İki şube birbirinden ayrılmadı.

Şimdi, dev üzerinde bir taahhütte bulunursanız, birleşmeden önce tekrar aynı taahhütte başlayacaksınız, A, ama şimdi özellikler C ve dev'e B'ye gidecek. Bu, dallar olarak görselleştirmeye çalıştığınız bölünmeyi gösterecek şimdi ayrıldı.

*-----*Dev-------*Feature

Karşı

       /----*DevB
*-----*DevA
       \----*FeatureC

9

Git 2.23 tanıtır git switchve git restoresorumluluklarını bölmekgit checkout

Git 2.23'ten itibaren mevcut bir şubeden yeni bir şube oluşturulması:

git switch -c my-new-branch

Yeni bir şubeye geçtim 'benim yeni şubem'

  • -c , --create kısaltmasıdır ve iyi bilinen git kasasının yerini alır -b

Değişiklikleri daha ayrıntılı olarak açıklayan bu Github blog yayınına göz atın :

Git 2.23, mevcut komutlar grubuna yeni bir çift deneysel komut getirir: git switch ve git restore . Bu ikisi, sonunda iyi bilinen git kasası için daha iyi bir arayüz sağlamayı amaçlamaktadır. Yeni komutların her birinin net bir ayrımı var, git kasasının birçok sorumluluğunun ne olduğunu düzgün bir şekilde bölüyor


9

Yerel dizininizdeki başka bir daldan dal oluşturmak için aşağıdaki komutu kullanabilirsiniz.

git checkout -b <sub-branch> branch

Örneğin:

  • oluşturulacak yeni dalın adı 'XYZ'
  • XYZ'nin oluşturulması gereken ABC şubesinin adı
git checkout -b XYZ ABC

3

Başka bir daldan dal yapmak istiyorsanız, aşağıdaki adımları izleyin:

Varsayımlar :

  1. Şu anda ana şubedesiniz.
  2. Taahhütte değişiklik yok. (Yapmanız gereken herhangi bir değişiklik varsa, saklayın!).
  3. BranchExistingadıyla yeni bir dal oluşturmanız gereken dalın adıdır BranchMyNew.

Adımlar :

  1. Şubeyi yerel makinenize getirin.

    $ git fetch origin BranchExisting : BranchExisting
    

Bu komut, bölgenizde aynı şube adına sahip yeni bir şube oluşturur.

  1. Şimdi, ana şube kasasından yeni getirilen şubeye

    $ git checkout BranchExisting
    
  2. Şimdi BranchExisting'dasınız. Şimdi bu mevcut daldan yeni bir dal oluşturun.

    $ git checkout -b BranchMyNew
    

Hadi bakalım!


1

Başka bir dal oluşturmak için bu sözdizimini de kullanabilirsiniz:

git push origin refs/heads/<sourceBranch>:refs/heads/<targetBranch>

"Git checkout -b" + "git push origin" dan biraz daha kısa

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.