Sanırım aradığınız terim bir 'kiraz kıracağı'. Yani, bir dalın ortasından tek bir işlem alıp diğerine ekleyin:
A-----B------C
\
\
D
olur
A-----B------C
\
\
D-----C'
Bu tabii ki git cherry-pick komutuyla yapılabilir.
Bu commit ile ilgili sorun, git'in commit'leri onlardan önceki tüm geçmişi dahil etmeyi düşünmesidir - bu nedenle, eğer böyle üç commit varsa:
A-----B-----C
Ve B'den kurtulmaya çalışın, şu şekilde tamamen yeni bir commit oluşturmalısınız:
A-----------C'
C 'farklı bir SHA-1 kimliğine sahip olduğunda. Aynı şekilde, bir daldan diğerine bir işlem seçen kiraz, temelde bir yama oluşturmayı, sonra onu uygulamayı ve bu şekilde de geçmişi kaybetmeyi içerir.
Kaydetme kimliklerinin bu şekilde değiştirilmesi, git'in diğer şeylerin yanı sıra birleştirme işlevini bozar (gerçi, eğer idareli kullanılırsa, bunun üzerine bilgi verecek buluşsal yöntemler vardır). Daha da önemlisi, işlevsel bağımlılıkları görmezden gelir - eğer C gerçekten B'de tanımlanan bir işlevi kullanırsa, asla bilemezsiniz.
Belki de bunun üstesinden gelmenin daha iyi bir yolu, daha ince taneli dallara sahip olmak olabilir. Yani, sadece bir 'ana' sahip olmak yerine, 'özellikA', 'hata düzeltmeB', vb. Var işiniz bittiğinde bir şube. Bu, git'in tasarlandığı iş akışı ve iyi olduğu şey :)
Yamalar düzeyinde bir şeylerle uğraşmakta ısrar ediyorsanız, darcs'e bakmak isteyebilirsiniz - depoyu bir dizi yama olarak görür ve bu nedenle kiraz toplama temel işlem haline gelir. Ancak bunun, çok yavaş olması gibi kendine özgü sorunları vardır :)
Düzenleme: Ayrıca, iki senaryo hakkındaki ikinci sorunuzu anladığımdan emin değilim. Belki olayların kafa karıştırmasını önlemek için onu daha ayrıntılı olarak, muhtemelen ayrı bir soru olarak tanımlayabilirsiniz?