Soru Bir birleşme çatışmasına girdim. Birleşmeyi nasıl iptal edebilirim?


kullandım git pull ve bir birleşme çatışması vardı:

unmerged:   _widget.html.erb

You are in the middle of a conflicted merge.

Dosyanın diğer sürümünün iyi olduğunu ve benimkinin kötü olduğunu biliyorum, bu yüzden tüm değişikliklerim terk edilmeli. Bunu nasıl yapabilirim?


1913
2017-09-19 13:21


Menşei


Bunun çok eski bir soru olduğunu anlıyorum, ama iptal etmek istiyor musunuz? bütün Birleştirin ve dallanmış halde birleşmiş olduğunuz daldan ayrılmayın, ya da sadece bu dosyayı daha büyük bir birleştirme parçası olarak görmezden gelmeyin, tüm diğer dosyaların normal olarak birleşmesine izin verilsin mi? Bana göre, başlığınız eskisini ima ediyor, soru bedeniniz ikincisini istiyor. Cevaplar, her şeyi açıklığa kavuşturmadan yapar. - rjmunro
Otomatik birleştirme başarısız olduğunu söyleyerek benzer bir durum var; çakışmaları düzeltin ve ardından sonucu işleyin: [rejected] gh-pages -> gh-pages (non-fast-forward) - Chetabahana
Gwyn, burada kabul edilmiş bir cevabı seçmek faydalı olabilir. En üstteki oylama, daha güncel olan bazı çözümlerden biraz daha az güvenli, bu yüzden başkalarının üzerinde vurgu yapmasına yardımcı olacağını düşünüyorum :) - Amicable


Cevaplar:


Senin pull o zaman başarısız oldu HEAD (değil HEAD^) şubenizdeki son "geçerli" taahhütdür:

git reset --hard HEAD

İstediğiniz diğer parça, değişikliklerinin değişikliklerinizi aşmasına izin vermektir.

Git'in eski sürümleri, "onların" birleştirme stratejisini kullanmanıza izin verdi:

git pull --strategy=theirs remote_branch

Ancak bu, daha önce açıklandığı gibi kaldırıldı. Bu mesaj Junio ​​Hamano tarafından (Git sürdürücü). Belirtildiği gibi BağlantıBunun yerine bunu yaparsınız:

git fetch origin
git reset --hard origin

1731
2017-09-19 14:33



Bir sıfırlama yapmak yerine, bunu yaparak daha ayrıntılı bir seviyeye getirebilirsiniz: git fetch origin  -> git reset origin (soft reset, your changes are still present)  -> git checkout file_to_use_their_version_of another_file (steamroll your own changes back to match the origin)    Git'i asla kullanmam. En son kodum ile köken arasındaki bir kavgada, orijin her zaman kazanmalı, git fetch ve git rebase origin. Bu aslında benim birleşme ve çatışmalarımı az ve çok uzak tutar. - Kzqai
Katılıyorum. İlk önce almayı ve sonra yukarı akış değişikliklerini incelemek istiyorum.git log ..@{upstream} veya git diff ..@{upstream}). Bundan sonra senin gibi, işimi yeniden yapılandıracağım. - Pat Notz
Daha yeni bir cevapta belirtildiği gibi, 1.6.1 sürümünden itibaren, 'git reset --merge' kullanmak mümkündür - Matt Ball
kullandım git merge -X theirs remote_branch yerine git pull --strategy=theirs remote_branch gibi theirs bir seçenek gibi görünüyor recursive - mlt
Strateji yok theirs. - srcspider


Git sürümünüz> = 1.6.1 ise, kullanabilirsiniz git reset --merge.

Ayrıca, @Michael Johnson'ın bahsettiği gibi, git sürümünüz> = 1.7.4 ise, ayrıca git merge --abort.

Her zaman olduğu gibi, birleştirme işlemine başlamadan önce hiçbir değişiklik yapılmadığından emin olun.

İtibaren git adam sayfası

git merge --abort eşdeğerdir git reset --merge ne zaman MERGE_HEAD mevcut.

MERGE_HEAD Birleştirme devam ederken mevcut.

Ayrıca, birleştirme başlatılırken katılmamış değişiklikler hakkında:

Değişiklikleriniz varsa, birleştirme işlemine başlamadan önce işlemek istemezsiniz git stash onları birleştirme öncesi ve git stash pop birleştirmeyi bitirdikten veya iptal ettikten sonra.


1592
2018-03-28 23:16



İlginç - ama kılavuz beni korkutuyor. Tam olarak ne zaman kullanıma uygun? Ne zaman isteğe bağlı belirtmelisiniz? <commit>? #GitMoment: -o - conny
Birleştirme işlemini başlangıçtan tekrar yapmak istediğinizde bunu genellikle kullanırsınız. Opsiyonel taahhüdümü kendim belirleme gereği duymadım, bu yüzden varsayılan (isteğe bağlı <commit> değil) sadece iyi. - Carl
Bu cevabın daha fazla oy olmasını diliyorum! Bu noktada, birçok durumda en uygun çözüm gibi görünüyor. - Jay Taylor
Git v1.7.4 git merge --abort da çalışıyor. - Michael Johnson
Gitmemiş değişiklikler olsa bile git birleştirme öncesi durumu geri yükleyebildi. Güzel! - T3rm1


git merge --abort

Mevcut uyuşmazlık çözüm sürecini durdurun ve yeniden yapılandırmaya çalışın   birleştirme öncesi durum.

Birleştirildiğinde işlenmemiş iş türü değişiklikleri varsa   başladı git merge --abort bazı durumlarda yapamayacak   Bu değişiklikleri yeniden yapılandırın. Bu nedenle her zaman tavsiye edilir   Git birleştirmeden önce değişikliklerinizi gerçekleştirin veya saklayın.

git merge --abort eşdeğerdir git reset --merge ne zaman    MERGE_HEAD mevcut.

http://www.git-scm.com/docs/git-merge


378
2017-11-12 21:40



Bu v1.7.4 git beri mevcut olmuştur. Git reset --merge için bir takma addır. - Michael Johnson
Ahtapot birleştirme çatışmasıyla çalışmaz. - ks1322


Bu özel kullanım durumunda, birleştirme işlemini gerçekten iptal etmek istemezsiniz, sadece çatışmayı belirli bir şekilde çözmeniz yeterli olmaz.

Ayrıca, farklı bir strateji ile birleştirme işlemini sıfırlamaya ve gerçekleştirmeye özel bir gereksinim yoktur. Çakışmalar git tarafından doğru bir şekilde vurgulanmıştır ve diğer taraf değişikliklerini kabul etme zorunluluğu sadece bu dosya için geçerlidir.

Bir çakışmadaki bir yazılmamış dosya için, dizinde, dosyanın genel tabanı, yerel ve uzak sürümleri bulunur. (Bu, 3 yollu bir fark aracında kullanılmak üzere okundukları yerdir. git mergetool.) Kullanabilirsiniz git show onları görmek için

# common base:
git show :1:_widget.html.erb

# 'ours'
git show :2:_widget.html.erb

# 'theirs'
git show :3:_widget.html.erb

Uzak sürümü verbatim kullanmak için çakışmayı çözmenin en basit yolu şudur:

git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb

Veya git> = 1.6.1 ile:

git checkout --theirs _widget.html.erb

73
2017-09-20 10:41



ipucu için teşekkürler. Zayıf git kullanıcı arabiriminin bu smack'i değil mi? - Peter
@Peter: İkna olmadım. İstenen sonuç, basit seçeneklerle birkaç temel komutla gerçekleştirilebilir. Ne gibi gelişmeler önerirsiniz? - CB Bailey
Bence git 1.6.1 Komuta çok anlam ifade eder ve iyidir. Tam olarak istediğim şey buydu. Ben 1.6.1 öncesi çözümün yetersiz olduğunu düşünüyorum ve birleştirme çözüm sürecinden ayrılması gereken git diğer bölümleri hakkında bilgi gerektirir. Ama yeni versiyonu harika! - Peter


Bence bu git reset ihtiyacın var.

Dikkat et git revert demek çok farklı bir şey demek svn revert - Subversion'da geri dönüş (kaydedilmemiş) değişikliklerinizi iptal eder, dosyayı depodan geçerli sürüme döndürür. git revert bir taahhüt "geri alır".

git reset eşdeğer svn revertYani, istenmeyen değişikliklerinizi atın.


72
2017-09-19 13:25





Yorumlar önerdiğinden git reset --merge bir takma addır git merge --abortfarketmeye değer git merge --abort sadece eşdeğerdir git reset --mergeo verilen MERGE_HEAD mevcut. 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.

Başarısız bir birleşmeden sonra, yokken MERGE_HEAD, başarısız birleştirme ile geri alınabilir git reset --merge ama zorunlu olarak değil git merge --abort, Bu yüzden aynı şey için sadece eski ve yeni sözdizimi değiller.

Şahsen bulacağım git reset --merge Genel olarak tarif edilmiş olana benzeyen senaryolar için başarısız ve çok başarısız.


29
2018-04-02 12:16



Burada aslında "başarısız birleştirme" ile kastedilen nedir? Çakışmalarla mı yoksa başka bir şeyle mi? Ya da yeniden ifade etmek için: MERGE_HEAD ne zaman mevcut değildir? Benim takip soruum "git reset --merge" in daha iyi kullanımını anlamak için var. - Ewoks


Git 1.6.1.3'ten beri git checkout Birleştirme iki tarafından ödeme yapabildi:

git checkout --theirs _widget.html.erb

16
2017-07-17 01:29





Çalışan kopyaların durumunu koruyan bir alternatif:

git stash
git merge --abort
git stash pop

Genel olarak buna karşı tavsiyemdir, çünkü Subversion'da birleşme, aşağıdaki ilişkide şube ilişkilerini atarken etkilidir.


14
2017-07-13 18:57



Bu yaklaşımı, yanlışlıkla güzelce işlemeyen bir git-svn dalına birleştirdiğimde yararlı buldum. Git-svn izleme dalları ile çalışırken squash birleştirir veya kiraz alır daha iyidir. Aslında benim çözümüm gerçeğin ardından bir birleşme noktasına dönüşüyor. - Alain O'Dea