Git'te belirli bir etikete nasıl dönersiniz?


86

Git dalında eski işlemlere nasıl geri döneceğimi biliyorum, ancak bir etiket tarafından dikte edilen bir dalın durumuna nasıl geri dönebilirim? Bunun gibi bir şey tasavvur ediyorum:

git revert -bytag "Version 1.0 Revision 1.5"

Mümkün mü?


"Dalı geri sarmak" mı (yani, kaydetmeleri kaldırmak ) veya geçerli dala yeni bir işlem eklemek mi istiyorsunuz , bu dalı tüm dosyalar "o etiket tarafından verilen işlemdeki gibi" olacak şekilde ayarlıyor?
torek

Mevcut şubeye sizin tanımladığınız şekilde yeni bir commit eklemeyi tercih
etsem de

Bu durumda, bu cevaptakigit checkout <id> . yöntemi kullanın .
torek

Yanıtlar:


133

Git etiketleri yalnızca kaydetmeye yönelik işaretçilerdir. Yani bunları HEAD, dal adlarını veya sha hash'lerini yaptığınız gibi kullanırsınız. Kaydetme / revizyon bağımsız değişkenlerini kabul eden herhangi bir git komutuyla etiketleri kullanabilirsiniz. git rev-parse tagnameGösterdiği taahhüdü görüntülemek için ile deneyebilirsiniz .

Sizin durumunuzda en az şu iki alternatifiniz var:

  1. Mevcut şubeyi belirli bir etikete sıfırlayın:

    git reset --hard tagname
    
  2. Sizi etiketin durumuna getirmek için en üstte geri dönüş taahhüdü oluşturun:

    git revert tag
    

Yine de birleştirme taahhütleriniz varsa, bu bazı çatışmalara neden olabilir.


30
Bence "git revert <tag>", çalışan kopyanızı o sürüme geri yüklemek yerine etiketli kaydetmedeki değişiklikleri geri döndürür.
Matt

İzlenmemiş / dönüştürülmemiş dosyalardan da kurtulmak için stackoverflow.com/a/912737/923560
Abdull

3
@Matt'ın dediği gibi, kabul edilen cevap sadece etiketli kaydetmedeki değişiklikleri geri döndürdüğü için yanlıştır. Yapabileceğiniz en iyi şey commit hash'leri kullanmak ve şu cevabı takip etmektir: stackoverflow.com/a/4114122/6348485
Swagga Ting

Merhaba, "Sizi etiketin durumuna getirmek için en üstte geri dönüş taahhüdü oluştur" u açıklayabilir misiniz? Maalesef bunun ne anlama geldiğine dair hiçbir fikrim yok.
John Little


1

Git checkout'u kullanabilirsiniz.

Kabul edilen çözümü denedim ama bir hata aldım, warning: refname '<tagname>' is ambiguous'

Ancak yanıtın da belirttiği gibi, etiketler bir commit için bir işaretçi gibi davranırlar, böylece bir commit hash'inde yapacağınız gibi, sadece etiketi kontrol edebilirsiniz. Tek fark şununla önsöz etmen tags/:

git checkout tags/<tagname>

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.