2012-02-10 20 views
6

Cüretkâr VCS kullanıyorum, yanlışlıkla üç işlem itti ve bunların geri alınmasını istiyorum, bu başarılabilir mi? Oldukça eminim ki, değiştirdiğim depodaki herhangi bir kimseye hiçbir değişiklik yayılmadı, bu yüzden bu durumun kodunun kırılmayacağına eminim ...Mercurial geri al üç hg itme

HG rollback'i denedim ama ittim Hiçbir şeyi doğru şekilde geri alamıyorum. Ayrıca hg backout hakkında biliyorum, ama ihtiyacım olan şey için bunu kullanmalıyım emin değilim ...

Teşekkürler!

Bu grafik günlüğü olduğu

DÜZENLEME, bazı kaydedilmesini Birleştirme parçası olduğunu söylemeyi unutmuşum, ama onlar da

tip 
| 
a 
| \ 
| b 
|/
c 
| 
d 

dönmek gerekir ... geri gerekmektedir

1) Eğer: c ucu veya bu çünkü birleştirme önlemek için başka bir yol yoksa d ... zaten aktarıldıktan Eğer

+0

Grafik günlüğünün nasıl göründüğünü anlamıyorum. 'C' ile c'yi birleştiremezsiniz çünkü c, 'b' nin bir atasıdır. "A" değişiklikleri ile nasıl sonuçlandınız? Gerçekten birleştirme mi? Yoksa dışarıda kaldığınız daha fazla değişiklik var mı? –

+0

Bunu yeniden yazayım. Lineer tarihin 'd'-'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'geçmeye gerek olmadığı için, birleşme noktasında hiçbir anlamı yoktur. –

cevap

6

, artık yapabileceği tek iki şey vardır Merkezi deposu silebilir ve başka bir tane ile değiştirebilirsiniz:
Merkezi depoyu klonlayabilir, ancak Mercurial to clone only up to changeset "c"'a söyleyebilirsiniz.
Daha sonra bu depoyu (yanlış değişikliklere sahip olmayan) alabilir ve "eski" merkezi depoyu ('un yanlış değişikliklere sahip olmasını) değiştirebilirsiniz.

Dezavantaj: Bir kişi istenmeyen işlemleri daha sonra çektiyse ve daha sonra tekrar basarsa, yeniden depoda yer alırlar.
Bu nedenle, hiç kimsenin hatalarını veya kimsenin klonunu silen kimseyi almadığından emin olmalısınız.

2) seçeneği 1 mümkün değilse, sen etkilerini yanlış değişikliklerin geri almak için hg backout kullanabilirsiniz - değil changesets kendileri. bağlantısından
Alıntı:

Backout sözünden edilecek Changeset tersi bir changeset uygulayarak çalışır. Bu yeni değişiklik kümesi depoya bağlı ve sonunda birleştirildi.

Yani üç yanlış changesets bunların her üç yanlış changesets birinin etkilerini geri alınmasının, artı başka üç eklenecektir, depoda kalacaktır.
Eğer böyle yaparsanız, başka birileri yanlış değişiklikleri çektiyse de farketmez ... üç "geri çekilme" deşifreini çeker çekmez, her şey tekrar tamamdır.

+0

Teşekkürler! bahsettiğin ilk çözüm kullandığım şeydi ... –

2

Pozitif değilseniz, bu uzak depoya yapılan son şey itme gücünüzdeyse, ne siz ne de başka biri bunu ittiniz, o sisteme giriş yapabilir ve hg rollback'u çalıştırabilirsiniz.

Eğer yerel sistemde bu komutu çalıştırabilirsiniz ssh edebilir bir makine üzerinde bir depo ise:

ssh [email protected] hg -R /path/to/the/repo rollback 

Her zaman olduğu gibi geri alma gerçekten dikkatli olun lütfen. Çalışma dizinini hiç değiştirmeden depodaki son eylemi geri alır ve son eylemin ne olduğu her zaman açık değildir. Örneğin, bu datalosss geçerli:

...hack... 
hg commit -m 'important work' 
hg update somewhere else 
hg rollback 

Olmadı!

İlgili konular