Git birleşme çakışmalarıyla nasıl geri alınır


785

Daldayım mybranch1. mybranch2adlı kişiden çatallandı mybranch1ve değişiklik yapıldı mybranch2.

Sonra devam ederken mybranch1yaptım git merge --no-commit mybranch2 Birleşme sırasında çatışmalar olduğunu gösterir.

Şimdi her şeyi ( mergekomut) atmak istiyorum, bu yüzden mybranch1önceki haline geri döndü. Bu konuda nasıl bir fikrim yok.


Yanıtlar:


1355

Son Git:

git merge --abort

Bu, çalışma kopyanızı birleştirme işleminden önceki durumuna sıfırlamaya çalışır. Bu, her zaman güvenilir bir şekilde yapamasa da, birleştirmeden önceki taahhüt edilmemiş değişiklikleri geri yüklemesi gerektiği anlamına gelir. Genel olarak, taahhüt edilmemiş değişikliklerle bir araya gelmemelisiniz.

1.7.4 sürümünden önce:

git reset --merge

Bu daha eski bir sözdizimidir, ancak yukarıdakiyle aynıdır.

1.6.2 sürümünden önce:

git reset --hard

taahhüt edilmeyen birleştirme de dahil olmak üzere tüm taahhüt edilmemiş değişiklikleri kaldırır. Bazen bu davranış, yukarıdaki komutları destekleyen daha yeni Git sürümlerinde bile yararlıdır.


1
Ancak git'in eski sürümleri için bu kullanım yolu
Anshul

7
Bazen git reset --mergedaha yeni sürümlerde bile kullanmanız gerekebilir . Git 2.2.1 git merge --abortnerede git reset --mergebaşarılı (ve doğru olanı yapar ) hata (hiçbir değişiklik yapma) yaşadım .
Theodore Murdock

Benim stash haşhaş otoriter çatışma olduğunda git merge --abortbunu yapmak için gerekli bulundu git reset --merge.
Şef Firavunu

1
genellikle git merge --abortbenim için çalışıyor, ancak kendimi müstakil bir HEAD durumuna teslim ettiğim bir durumda buldum ve dosyalarımdan birinin "her ikisi de değiştirildi" durumu vardı. Her şeyi atmak ve bir şubeye geri dönmek istedim, zorunda kaldım git reset --hard, git merge --abortiptal etmek için bir birleşme olmadığını söyledi (MERGE_HEAD eksik).
Yano

Bazen git merge --abortsizi önceki durumunuzu geri getiremez ve bu durumda "eski sözdizimi" git reset --hardhile yapar.
Kevin Stewart

130

Aslında buna değer fark olduğunu git merge --abortsadece eşdeğer git reset --mergegöz önüne alındığında MERGE_HEADmevcuttur. Bu, birleştirme komutu için git yardımında okunabilir.

git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.

Hiçbir yokken başarısız bir birleştirme sonra MERGE_HEAD, başarısız birleştirme ile çözülmek olabilir git reset --mergeille ile değil git merge --abort, onlar aynı şey için eski ve yeni sözdizimi sadece bu yüzden .

Şahsen git reset --mergegünlük işlerde çok daha kullanışlı buluyorum .


2
Teşekkür ederim, bu bilgi çok yardımcı oldu. git stash applyYanlış bir dalda başlayan ve hile yaparken git merge --aborthiçbir şey yapmayan (hayır MERGE_HEAD) bir birleşim vardı git reset --merge.
geomaster

4
Ben git merge --abortyeni bir komut olduğunu söyleyerek yaklaşık 10 kişi gördüm git reset --mergeve @ geomaster ile aynı sorunu koştu bu süper yararlı oldu teşekkürler!
Tom

106

En son git'i kullandığınızı varsayarsak,

git merge --abort

Tamam bu 1.7.0.7 ile çalışmıyor :(. Sıfırla kullanmak zorunda
Anshul

5

Komutla birleştirmeyi ilk önce geri alabileceğiniz iki şey vardır

git merge --abort

veya

komutuyla geçici olarak önceki tamamlama durumuna gidebilirsiniz

git checkout 0d1d7fc32 

0

SourceTree

Birleştirme işleminizi gerçekleştirmezseniz, başka bir şubeye (= checkout) çift tıklayın ve sourcetree size tüm değişiklikleri atmayı sorduğunda, kabul edin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.