2016-03-20 11 views
2

Bir işlemi Git ile geri almak oldukça basit.Birleştirme işlemini iptal etme (daha sonra birleştirmek için)

Ancak, bir birleşmeyi iptal etmek ve daha sonra birleştirmek için bir işlemi geri almak istersek ne olur?

master--\--------------/------revert-merge------/------------------ 
     \   /     /merge nothing     
      \--branch--/----no-modification-----/------  

I (bana veya bir başkası) bu çizgiyi döndürüldü ve Git neden bilmiyorum önce ve birisi zaten birleşti çünkü Git benim değişiklikleri kabul etmeyecek bir ilk birleştirme işlemi sonrasında tekrar birleştirirseniz.

Git bkz. Zaten bir birleştirme yaptım ve sonra ikinci birleştirme yaptığımda geri dönüş nedenini bilmediğini ve Git'in daha fazla değişiklik olmadığını düşündüğüm için geri aldım.

Aslında, bir işlemi iptal etmek istediğimde basit bir geri dönüş yapmamalıyım. Birleştirme işlemini iptal etmek/iptal etmek için doğru işlem nedir?

Bu çok https://www.git-scm.com/blog/2010/03/02/undoing-merges.html

+0

Sadece geri dönüşü geri almak? – mkasberg

+0

Evet, aslında benim yaptığım şeydi, ancak bir ekiple çalışırken ve birkaç şubeyle bir sonraki birleşmeyi yaparken neleri geri almanız gerektiğini hatırlamak zor. Benim örneğim çok basit. -Değişikliği okuyabileceğin yer, gerçek projelerde aslında hiçbir zaman doğru değildir. Böylece, ikinci birleştirme yapacağınız zaman ve geri dönüşünüzü geri almayı unuttuysanız, elbette hatalar yaratırsınız. Ardından, ikinci birleştirme sonrasında geri dönmeye çalışırsınız ve ağlamaya başlarsınız ... –

+0

Geçmişte olmak istediğiniz yere geri dönmek için git reflog'u kullanın. – CodeWizard

cevap

2

Bu senaryoda here hakkında Linus büyük bir makale (kim Git yazdı) Orada istenen veli dönmek için basitçe. Yine dalı birleştirme önce dönmek dönmek, daha sonra, daha sonra birleştirme dönmek, kötü birleştirme yapın

Seçenek 1:

o 2 seçenekten aşağı kaynar Özetlemek gerekirse. Geri dönüşün geri alınması, kötü değişiklikleri geri almanız anlamına gelir ve ardından tekrar şubenizi birleştirerek bunları düzeltirsiniz. Bu yöntemin olumsuz tarafları, bahsettiğiniz gibi, geri dönüşü bulmanız ve şubenizi tekrar birleştirmeden önce geri almanız gerektiğini hatırlamanız gerekir.

---o---o---o---M---x---x---W---x---Y---* 
      /     /
     ---A---B-------------------C---D 

A ve B kötü kaydedilmesini olduğunda, M birleştirme, W, M, döner, Y W. döner

Seçenek 2 Kötü birleştirme yapın, birleşmeyi geri alın, ardından tamamen yeni bir dal yapın (değişiklikleri yineleyerek veya muhtemelen kirazla toplayarak). Bu seçeneğin olumsuz tarafı başka bir ayrı şube yapmak zorunda. Ama tersine, geri dönüşü geri almayı hatırlamak zorunda değilsiniz.

---o---o---o---M---x---x---W---x---x 
     /    \ 
    ---A---B     A'--B'--C' 

A ve B kötü onaylatabilirsiniz olduğunda, M birleştirme, W M. Tabii

, muhtemelen en iyi seçenek birleştirilecek hazır değil mürşide şeyler birleşmesini önlemek için döner usta. Çünkü temizlik için hiçbir seçenek gerçekten harika değil.

0

Bir Git ile taahhüt dönmek için basit yardımcı olabilir. Ama eğer bir birleşmeyi birleştirme işlemini daha sonra birleştirmek için iptal ettirmek istersem?

Birkaç seçenekleri: Eğer git reflog kullanabilirsiniz

git reflog

İlk - burada olduğunu okumuştum:
How to move HEAD back to a previous location? (Detached head)


git revert

Birleştirme, birden çok işlemin birleşimidir.
Her bir işlemin adı parent; dolayısıyla birleştirme birkaç ebeveyne (2 veya daha fazla) sahip.
Sadece 2 ebeveyniniz olduğu yerde kolay akış sağlansın. Bunu geri döndürmek için ne yapabilir?

bir revert komutla

# Add the -m to the revert to indicate that you are reverting a merge 
# (-m 1) - The number is the id of the parent (1-N) 
# SHA-1 - optional SHA-1 to revert 
git revert -m 1 SHA-1 
İlgili konular