Git'te ana dalı bir etikete nasıl geri döndürebilirim?


92

Kökeni ve gelişmekte olan şubelerimiz var. Ana öğenin başlangıç ​​durumu olarak etiketlendi tag_ABC.

Geliştirme dalında birkaç değişiklik yaptık ve kökene ittik. Sonra kazara gelişerek usta olarak birleştik ve kökene ittik.

Şimdi ustayı kontrol noktasına geri döndürmek istiyoruz tag_ABC. Bunu nasıl yapabiliriz?

Yanıtlar:


164

Yapabilirsin

git checkout master
git reset --hard tag_ABC
git push --force origin master

Lütfen bunun, yukarı akış deposundaki mevcut geçmişin üzerine yazacağını ve bu depoyu kontrol ettiren diğer geliştiriciler için sorunlara neden olabileceğini unutmayın.


5
Bu şekilde tüm dallar zorla itilecektir. Denemek isteyebilirsinizgit push --force origin master
danza

1
Referans olarak, bir önceki işleme geri dönmek içingit reset --hard HEAD^
Geoff

1
BTW git reset --hard HEAD^, bir seferde bir işleme geri adım atmak için birden çok kez kullanılabilir, ardından uzaktaysa git push --force origin masterkullanılabilir.
Luke Wenke

Ayrıca diğer kişilerin yerel kopyalarının ana dalını önceki sürüm kullanımına sıfırlamak için git pullvegit reset --hard origin/master
Luke Wenke

Bu geri dönüşten sonra takıma küçük bir tavsiye verilebilir: usta şubeden çekin !! Teşekkürler!!
JRichardsz

95

Bu, sorunun doğrudan cevabı değildir, ancak bu sayfa, bir şubenin kodunu bir etiket sürümüne geri döndürmenin yollarını ararken geri gelir.

Başka bir yol, dalın mevcut durumu ile geri dönmek istediğiniz etiket arasında bir fark oluşturmak ve ardından bunu dala uygulamaktır. Bu, sürüm geçmişini doğru tutar ve yapılan değişikliklerin devam edip ardından tekrar çıktığını gösterir.

Şubenizin ana olarak adlandırıldığını ve geri dönmek istediğiniz etiketin 1.1.1 olduğunu varsayarsak

git checkout 1.1.1
git diff master > ~/diff.patch
git checkout master
cat ~/diff.patch | git apply
git commit -am 'Rolled back to version 1.1.1'
git push origin master

21
Geçmişi olduğu gibi tuttuğu ve depoyu kontrol ettiren diğer kişiler için sorun yaratmadığı için bu kabul edilen cevap olmalıdır.
OpenUserX03

1
Bu zarif görünüyor. Ancak qa şubesini önceki bir etikete geri döndürmeyi denedim ve yama başarısız mesajları aldım. $ cat ../diff_qa.patch | git apply <stdin>: 55: sondaki boşluk. <stdin>: 336: sondaki boşluk. <stdin>: 12692: sondaki boşluk. <stdin>: 12695: sondaki boşluk. <li> {{$ etiket ['sıra'] + 1}}: <stdin>: 12706: sondaki boşluk. hata: yama başarısız oldu: .env.wholo: 1
rickatech

Birkaç çözüm denedim ama hiçbiri işe yaramadı. Bu bir cazibe gibi çalıştı. Çok teşekkürler @John
Strabek

Bunu yapmanın doğru yolu budur. Yıkıcı değil ve tüm geçmişi koruyor
Nitin Bansal

Bu benim için çalışmıyor. İlk 3 komutu herhangi bir sorun olmadan çalıştırabilirim ama yaptığımda cat ~/diff.patch | git applybana söylüyor error: unrecognized input. Herhangi bir fikir? @NitinBansal belki de son zamanlarda yorum yaptığından beri?
Experience111
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.