Git: Farklı bir yerel daldaki tüm değişiklikleri at


117

Uzak bir şubeyi izleyen yerel bir konu şubem var. Tartışma uğruna, taahhüt geçmişlerinin şöyle göründüğünü söyleyin:

A--B--C--O1--O2--O3 (origin/phobos)
       \
         L1--L2--L3 (phobos)

Göreceli işlem geçmişlerine baktıktan sonra, şimdi yerel phobosşubede yapılan tüm değişiklikleri atmak ve onu doğrudan bir kopyası haline getirmek istiyorum origin/phobos, böylece yerel tarih şu şekilde görünür:

A--B--C--O1--O2--O3 (phobos origin/phobos)

phobosŞubede yerel değişiklikleri gerçekten istemiyorum ve daha sonra kaynak deposunda herhangi bir birleşmenin görünmesini gerçekten istemiyorum. (Yani, aklımdaki sadece birleştirme değil.)

Bu gerçekten kolay olmalı gibi görünüyor, ancak google-fu'm beni hayal kırıklığına uğrattı. Bunu nasıl yaparım?

Yanıtlar:


79

Şubeyi silin, ardından yeniden oluşturun:

$ git branch -D phobos
$ git checkout --track -b phobos origin/phobos

37
Dalın başını sıfırlamaya karşı bu yaklaşımla ilgili bir sorun, dalı silmenin, dalın yeniden bloğunu patlatmasıdır. Dalın sıfırlanması ise yalnızca reflog'u korumakla kalmaz, aynı zamanda sıfırlamayı reflog'a kaydeder. Bu, gerekirse işlemi daha sonra kolayca geri döndürülebilir hale getirir.
Dan Molding

9
@Electrons_Ahoy, burada kabul edilen cevabı Dan'in cevabı olarak değiştirmenizi öneririm (böylece benim gibi bunu nasıl yapacaklarını Google'da araştıran insanlar daha güvenli yöntemi seçebilirler).
Steve Chambers

4
@ DanMoulding'in cevabı, gereksiz olduğunda yerel bir şubeyi silmeyi içermez. Çok daha güvenli.
brma

@brma: Nasıl yani? Hâlâ yeni bir taahhüt için bir dalı işaret ediyor.
mipadi

5
Dan Moulding'in cevabı daha güvenli. Bence onu seçmelisin.
Daniel Apt

331
git checkout phobos
git reset --hard origin/phobos

Bu, Git'e head'i phobosaynı commit ile sıfırlamasını origin/phobosve çalışma ağacını eşleşecek şekilde güncellemesini söyler .


35
IMO kabul edilen cevap bu olmalıdır; çıkarma / yeniden oluşturma ile ameliyat yapmak yerine dal işaretçisini nakletmek için "sıfırla" komutunu verir.
vdboor

Aslında, bunu önce denedim ve yerel kopya tarafından neredeyse kullanılamaz hale gelen bir ton hata yaptı. Silme / yeniden oluşturma daha az zarif olabilirdi, ancak herhangi bir takip sorusu sormam gerekmedi.
Electrons_Ahoy

3
@Electrons_Ahoy: Hmm, bu kesinlikle normal değil. Deponuz iyi çalışır durumdaysa, bu sıfırlamayı yapmak normalde sorunsuz bir işlem olmalıdır.
Dan Molding

ya da tuhaf olsa bile. Bu komutu, aslında ne yaptığını okumadan "yanlışlıkla" verdiyseniz, eve dönüş yolunu bulmak için git reflog kullanın. :)
dbn

Ayrıca bu, şubedeyseniz ve yerel olarak karıştırdıysanız da işe yarar.
slott
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.