5 Soru: Varolan ve taahhüt edilmeyen işleri Git'teki yeni bir şubeye taşı

tarafından oluşturulan soru Mon, Oct 9, 2017 12:00 AM

Yeni bir özellik üzerinde bazı çalışmalar başlattım ve biraz kodladıktan sonra bu özelliğin kendi branşında olması gerektiğine karar verdim.

Varolan taahhüt edilmemiş değişiklikleri yeni bir şubeye nasıl taşırım ve mevcut olanı sıfırlarım?

Yeni özellikteki mevcut çalışmaları koruyarak mevcut şubemi sıfırlamak istiyorum.

    
2838
5 Yanıtlar                              5                         

Aşağıdakileri kullanın:

 
git checkout -b <new-branch>

Bu, geçerli şubenizi olduğu gibi bırakır, yeni bir şube oluşturur ve satın alır ve tüm değişikliklerinizi devam ettirir. Daha sonra ile bir taahhütte bulunabilirsiniz:

 
git add <files>

ve yeni şubenize şu sözleri verin:

 
git commit -m "<Brief description of this commit>"

Çalışma dizinindeki ve dizindeki aşamalardaki değişiklikler henüz bir şubeye ait değil. Bu, değişikliklerin biteceği yerde değişir.

Orijinal dalınızı

sıfırlamayın , olduğu gibi kalır. <old-branch>'daki son taahhüt yine aynı olacak. Bu nedenle, checkout -b ve sonra taahhüt.

    
3314
2017-03-27 11: 42: 20Z
  1. Sadece orijinal şubemi sıfırlamadan önce tamamlanmamış bir özellik yerine getirmem gerekiyor mu? Yoksa bu kaydedilmemiş dosyalar taahhüt edilmeksizin korunur mu?
    2009-09-08 16: 02: 17Z
  2. FYI: çalışma dizinindeki değişiklikler ve dizinde düzenlenen değişiklikler bir şubeye ait değil. Bu değişikliklerin biteceği yerde git checkout -b <new branch> değişiklik var.
    2009-09-08 17: 00: 25Z
  3. Zaten bir şubeniz varsa ve değişikliklerinizi mevcut şubeye taşımak istiyorsanız, ödeme stackoverflow.com/questions/556923/…
    2011-01-25 08: 41: 44Z
  4. Yeni şubenizi uzak havuza göndermek istiyorsanız: > stackoverflow.com/questions/2765421/...
    2013-12-13 02: 15: 37Z
  5. @ JDSmith: değişikliklerin yapılması yapmayın herhangi bir şubeye ait. Yalnızca git checkout ./git reset --hard çalışma dizininde bulunurlar, kurtarılamaz bir şekilde kaldır onları
    2015-11-05 06: 33: 18Z

Alternatif olarak:

  1. Geçerli değişiklikleri geçici olarak saklayın:

    $ git stash

  2. Bu rafa göre yeni bir şube oluşturun ve yeni şubeye geçin:

    $ git stash branch <new-branch> stash@{0}

İpucu: stash adını yazmayı azaltmak için sekme tuşunu kullanın.

    
295
2017-03-15 22: 50: 34Z
  1. Diğer şube zaten mevcutsa, ödemeyle hemen sonra git stash apply’a geçebilirsiniz.
    2015-12-21 18: 27: 15Z
  2. "İpucu: stash adını yazmayı azaltmak için sekme tuşunu kullanın" ipucunu anlamıyorum. İsim "stash @ {0}" değil mi? Başarıyla çalıştıramıyorum.
    2017-04-07 03: 58: 17Z
  3. Bu neden kabul etmekten daha iyidircevap stackoverflow.com/a/1394804/754997 ?
    2017-05-30 23: 17: 19Z
  4. Bunun neden daha iyi olduğunu anlamıyorum, git checkout -b <new branch name>'un kabul edilen cevabından sonra daha iyi.
    2017-08-11 05: 32: 01Z
  5. Saklamadan önce git add -A'a ihtiyacınız yok.
    2018-02-10 13: 09: 20Z

Kod verirken ana şubenizde taahhütte bulunuyorsanız , ancak şimdi bu taahhütleri farklı bir şubeye taşımak istiyorsunuz:

  1. Geçerli geçmişinizi yeni bir şubeye kopyalayın, aynı zamanda herhangi bir tamamlanmamış değişiklik de getirin:

     
    git checkout -b <new-feature-branch>
    
  2. Şimdi orijinal "dağınık" şubeyi geri dönmeye zorla: (buna geçmeden)

     
    git branch -f <previous-branch> <earlier-commit-id>
    

    Örneğin:

     
    git branch -f master origin/master
    

    veya 4 taahhütte bulunduysanız:

     
    git branch -f master HEAD~4
    

Uyarma : Bu dal için git branch -f master origin/master'un izleme bilgilerini sıfırlayacağı görünüyor. Öyleyse, master şubenizi origin/master dışında bir yere itecek şekilde yapılandırdıysanız, bu yapılandırma kaybolacaktır.

Bir alternatif, bu sıfırlama tekniğini kullanmaktır. Ancak bu talimatlar, sahip olduğunuz herhangi bir kabul edilmemiş değişikliği iptal edecektir. Bunları saklamak istiyorsan önce sakla ve sonunda sakla.

    
41
2018-03-14 04: 05: 16Z
  1. Bu, op'nin istediğinden biraz farklı bir soruyu yanıtlar. Bu cevabı buraya koymaya karar verdim çünkü Google’ın bir cevap ararken burası beni getirdiği yerdi. Bu durumla ilgilenen asıl soru burada .
    2016-12-28 04: 49: 15Z

Eğer bunu yaparsanız, tek bir işlem kimliğini kirazlı olarak da seçebilirsiniz. Master'da çalışmaya başladığımda bunu sık sık yapıyorum ve ardından kökenime gitmeden önce yerel bir şube oluşturmak istiyorum /.

 
git cherry-pick <commitID>

burayı açıklandığı gibi, kiraz toplama ile yapabileceğiniz birçok şey var, ancak bu olabilir sizin için bir kullanım durumu.

    
17
2015-11-30 20: 58: 06Z
  1. Kısmi değişiklikleri yeni bir şubeye taşımak için daha iyi bir çözüm ... şu an için istediğiniz şeyi yapabileceğiniz için, diğer tüm değişiklikleri saklayın, istediğiniz şubeye göz atın şubeden, yeni şubeye bağlı vişneler, orijinal şubeye geri dönün, zorlu işleri tekrar sıfırlayın, daha sonra stash pop yapın, ekleyin, tamamlayın ve şanşöre şarkı söyleyin.
    2016-01-22 10: 24: 56Z
  2. @ Meredith, haha, ya böyle bir şey. Değişikliklerinizi önceden planlamadıysanız, bu harika bir şey ... ve bunu kim yapıyor;)
    2016-01-22 17: 10: 06Z

Genel senaryo şöyledir: Yeni özellik için yeni şube oluşturmayı unuttum ve tüm işi eski özellik dalında yaptım. Tüm "eski" çalışmaları ana dalına verdim ve yeni dalımın da "ana" dan büyümesini istiyorum. Yeni işim için tek bir taahhütte bulunmadım. Şube yapısı: "Ana" - > "Old_feature"

 
git stash 
git checkout master
git checkout -b "New_branch"
git stash apply
    
17
2018-08-13 16: 07: 54Z
kaynak yerleştirildi İşte