2011-10-26 14 views
19

Silmek istediğim dallarda olmayan yerel işlem var. Onları yeniden düzenlemek istemiyorum, bunları gerçekten silmek istiyorum ve bu taahhütle ilgili tüm içeriği kaybediyorum.Git bir yetim işlemi nasıl yapılır?

Bunu yapmak için bir komut mu var?

Şimdiye kadar önerildiği kadarıyla etkileşimli yeniden oluşturmayı denedim, ancak yalnızca işlemeyi sürdürüyorum, onları silmez. Reflog silme özelliğini de kullanmayı denedim, ancak belirli bir taahhüt Kimliği komutuna nasıl geçeceğimi anlayamıyorum.

o [master] Commit #6 
| 
o Commit #5 
| 
| o Commit #4 
|/ 
o Commit #3 
| 
o Commit #2 
| 
o Commit #1 

Ben # 4 işlemek fiziksel olarak silmek istiyorum:

İşte çalışma ağacı.

+0

"Taşımakta hareket et" hakkında ayrıntılı bilgi verir misiniz? – greg0ire

+0

@ greg0ire iyi, varoluş hala var, ama başka bir şeye bağlı .. Bu bir rebase ne yapıyor: Bağlı ebeveyn değiştiriliyor ... hayır? – FMaz008

+0

Etkileşimli yeniden oluşturmada, satırı silmek istediğiniz taahhütle birlikte tamamen silmeniz gerekir. Taahhüdü geri almak, sadece belirtilenin ters farkını uygulayarak yeni bir taahhüt yaratıyor. Bu sadece silmeniz gereken başka bir taahhüt ekler. Rebase'yi deneyin ve çizgiyi tamamen kaldırın. –

cevap

28

Hiçbir şey tarafından başvuru yapılmazsa, zaman içinde çöpün toplanmasıyla kaldırılır.

elden önce zorlamak istiyorsanız

, sadece herhangi bir dalı artık parçası olduğundan emin olmak gerekir, bir taahhüt çıkarmak için

+0

Peki bir daldaydım, sonra bir taahhütte bulundum, sonra bir GUI ile bu işlemi geri aldım (bunun bir sıfırlama ile uyumlu olduğunu düşünüyorum). Şimdi benim taahhüdüm tüm şubeden çıktı, ancak taahhüt hala bir şubeye "ana". Komutu denedim, ama yine de işe yaramaz işlere sahibim :( – FMaz008

+0

Gitme işleminin geri dönüşü, yalnızca taahhütte bulunmamakla kalmıyor, gerçekte bu taahhüdün tersini uyguluyor. Bir dalın ucu, 'Git reset --hard shaOfLastGoodCommit' kullanın.Bu kötü taahhüt (ler) kaldıracak ve son iyi işlem için şubenizin ucunu hareket ettirecektir. – Andy

+0

Zaten sıfırlama --hard, iki kez .. sadece şube başlığını ("ana etiket") silmek istediğim sürece değiştirdim, sonra yerine gerçek şube başlığını koydum, fakat silmek istediğim işlem hala orada. – FMaz008

2

git gc --prune=now --aggressive kullanın. Yani, deponuzdaki her bir şube için, kötü işlemenin o şubeyi tanımlayan ana-ana işlem zincirinin bir parçası olmadığından emin olun. Böyle bir şube bulursanız ya silin, ya da geçmişini değiştirin, böylece artık kötü bir taahhüt içermez.

Bu doğru olduğunda, kötü işlem eninde sonunda çöp toplanacaktır.

İlgili konular