2013-05-28 17 views
5

Bir özellik dalını "geri almayı" istiyorsanız, hangi seçenekleriniz var? Diyelim ki bitirdiğiniz (geliştirmeye ve özellik dalını silen) yeni bir özellik eklediğiniz supercool-feature'u ekledikten sonra bir sürüm haline gelir. Ancak, kullanıcılarınız bu supercool-feature'u gerçekten sevmez. Geliştirme ve bir sürüm haline getirilmiş olan bu özelliği nasıl geri alabilir/geri alabilir/tersine çevirebilirim?Git-Akışı bitmiş özellik dalını geri alma

Sürümlerimi yapmak için SourceTree kullanıyorum.

+1

Iyi birleştirme geri ana hat değildir Z ... Açıkçası onun biraz bundan daha karmaşık ama ayrıntı kodunuzu ve testlerinizi nasıl düzenlediğinize dayanıyor. Bu soru için daha fazla şey olduğunu hissediyorum. –

+0

Ayrıca, bu gerçekten git-akışına özgü bir soru değildir. Git-akışının sizin için ne yaptığı, yalnızca özellik dalınızı geliştirip, sonra da yeniden geliştirerek birleştirir. Git-akışında hiçbir sihirli şey yok, hepsi sadece git. –

+0

@AlexBrown bu yüzden birleştirme işlemini nasıl geri alabilirim? Git akış sürecinin nasıl çalıştığını bildiğinizden emin değilim. Ama git-akışındaki bir özelliği bitirdiğinizde, bir "geliştirme" dalına birleştirilir ve daha sonra özellik dalı silinir. Bir sürüm oluşturmaya karar verdiğinizde, geliştirmeden yeni bir dal yaparsınız ve sürümünüze özgü değişiklikleri yaparsınız ve sonra bunu "ana" ye birleştirirsiniz. Öyleyse, gelişim ile birleştirilen “süper-cool” özelliğini nasıl geri alabilirim? –

cevap

12

Run

git revert -m 1 <sha1 of M> 

Açıklama

Durumunuz şöyle hakkındadır bu komut:

A-B-----C---D-M  # master 
    \  /
    X-Y---Z-  # supercool-feature 

A, B, C ve D vardı ana sütyen özellik dalınızda nch, X, Y ve Z. git merge supercool-feature Git yaptığınızda, sizin için "birleştirme taahhüdü" M oluşturuldu. Bu işlem, özellik şubenizdeki tüm işlemleri ve birleştirme çakışmaları düzeltmek için olası düzeltmeleri içerir. Yani, bir tane işleyen revert ise, featurebranch'unuzdaki her değişiklik bir daha gitmeyecek.

+1

+1 ASCII art eforu yapmak için +1 :) – bigge

+0

devils savunucusu: Supercool özelliği XZY'den her şeyi kaldırmayı nasıl biliyor ve master'dan (CD) her şeyi değil? Birleştirme simetrik ... – mnagel

+0

Birleştirme simetrik değildir. 'git merge', birleştirilecek daldaki değişiklik kümesine bakar (' git diff B ..Z') ve tek bir taahhütte bulunur. –

1

Aslında komut, Y, M geri X içeren dalda hareketli kaldırma

git revert -m 1 <sha1 of M> 

olan 1.