2011-01-27 20 views
5

Git olağanüstü bir araçtır, ama itti değişiklikleri geri almak için en iyi yolu etrafında fikrimi sarmak için henüz. İşte durum.Git: İtilmiş değişiklikleri geri almak için geri veya ödeme mi kullanıyorsunuz?

Bir şubem var ve GitHub'a birkaç taahhütte bulundum. O zamandan beri, tavşan deliğinden çok aşağı gitmeye karar verdim ve yaptığım işlerin birçoğunu hurdaya çıkarmalı ve yeniden başlamalıyız. Esasen, itilmiş taahhütlerin tümünü bir öncekine geri döndürmem gerekiyor. İşte

git revert # - creates a new commit that "undoes" the changes of one specific commit 
git checkout 'commit SHA' # - sets the head to that specific commit, wherein I will re-push to the repo, undoing my changes... I think 

Yani uygun olduğunu düşünüyorum iki komut Birazdan, am vardır? Dönmek istediğim belirli bir taahhütte git checkout yapmam gerekiyor mu? Yoksa bu kıvrımlı süreçte anlamadığım bir şey var mı?

Teşekkürler.

cevap

-3

git reset deneyin: Horia belirttiği gibi http://git-scm.com/docs/git-reset

+0

Git, önceden itilmiş olan işlemler üzerinde çalışıyor mu? –

+0

Bu, sorgunun önerdiği gibi, yerel dosyaların sıfırlanmasına gerek kalmadan, checkout'un etkisini yaratacaktır (elbette mevcut seçeneklerle daha heyecan verici şeyler yapabilirsiniz). Fakat sonraki taahhütlerle tarihte yaptığınız şeylerin etkisi aynı olacaktır. – ijw

+1

Bu işe yaradı. Bu öğretici - http://www.opentaps.org/docs/index.php/How_to_Use_Git:_a_Tutorialtutorial izledim ve işe yaramış görünüyor. –

-1

doğru bir git reset gerekir.

Git checkout, başka bir şubeye geçtiğinizde veya checkout kullanarak -b yeni bir şube oluşturabilir ve hemen ona geçebilirsiniz demektir. Eğer itti Ne

5

durumuna bağlı olarak iki senaryo vardır:

  • henüz kimse herhangi bir şey için itti dalı kullandı. Bu durumda, yerel şubeyi belirli bir taahhütte zorlamak için git reset'u kullanabilirsiniz ve git push parametresini --force parametresiyle yapabilirsiniz. Bununla birlikte, eğer kazara ittiğin dal üzerinde çalışmasına dayandırılmış bir kişi varsa, o zaman bunu gerçekten sıfırlayamazsın, çünkü o zaman değişikliklerini bir daldan ayırır. Bu, git revert'un oyuna girdiği yerdir. Önceki değişiklikleri etkin bir şekilde geri almak için bir ters yama kaydedecektir. Buradaki avantaj, diğerlerinin çalışmalarını kolaylıkla şubeye dayandırmasıdır.

Yöntem seçimi, deponuzun nasıl olduğuna ve kazayla yamalar ne kadar sürdüğüne bağlıdır. Birkaç geliştirici varsa, iletişim ve reset muhtemelen cevaptır. Ancak, uzun bir süre yaşamış olan bir şey var, tüm geçmişi yeniden yazmak istemediğiniz sürece, muhtemelen geri dönmek daha iyidir!

bakmak için başka bir yol şudur: git reset/git push --force tarihin yıkıcı yeniden yazma oysa git revert kalıcı olur. İkisi için uygun bir zaman var. Sonunda, Alice'i Tavşan deliğinden aşağıya doğru takip ettiğimde ve ötesinde ne olduğunu araştırdığımda, genellikle yerel olarak oluşturulan dallarda yapıyorum. Bazı değişiklikler seviyorsanız Sonra, ben genellikle bir test şube onları birleştirme ve ben master bunları birleştirme önce onları test dalda biraz karıştırın edelim. Bu şekilde problemden çok zaman ayırıyorsunuz. Kısacası, üzerinde çalıştığım her özellik için 20-30 yerel şubem var. İlk önce bireysel olarak test edilmeye eğilimlidirler. Bazen, yeni bir şubeyi test oluşturur ve her şeyi bu dalda birleştirir ve tüm testleri birlikte yapar. Şubeler arası çakışmaları izlemek için git rerere kullanıyorum. Avantajı, bir özellik diğerlerine zorlamak için yeterince kararlı olduğunda karar verebilirim.

İlgili konular