Ben git pull
kullandım ve birleştirme çakışması yaşadım:
unmerged: _widget.html.erb
You are in the middle of a conflicted merge.
Dosyanın diğer sürümünün iyi ve benimkinin kötü olduğunu biliyorum, bu yüzden tüm değişikliklerimi terk etmeliyim. Bunu nasıl yapabilirim?
Çekme işleminiz başarısız olduğu için HEAD
(HEAD^
değil) dalınızdaki son "geçerli" işlemdir:
git reset --hard HEAD
İstediğiniz diğer parça ise onların değişikliklerinin sizin değişikliklerinizi geçersiz kılmasına izin vermektir.
Git'in eski sürümleri "theirs" birleştirme stratejisini kullanmanıza izin veriyordu:
git pull --strategy=theirs remote_branch
Ancak bu, Junio Hamano'nun bu mesajında (Git bakımcısı) açıklandığı gibi, o zamandan beri kaldırılmıştır. Bağlantıda]1 belirtildiği gibi, bunun yerine şunu yapmalısınız:
git fetch origin
git reset --hard origin
Sanırım ihtiyacınız olan "git reset".
Dikkat edin, git revert
, örneğin svn revert
ten çok farklı bir anlama gelir - Subversion'da revert (commit edilmemiş) değişikliklerinizi atarak dosyayı depodaki geçerli sürüme döndürür, oysa git revert
"undoes" bir commit" eder.
git reset,
svn revert` ile eşdeğer bir işlem yapmalı, yani istenmeyen değişikliklerinizi atmalıdır.
Bu özel kullanım durumunda, birleştirmeyi gerçekten iptal etmek istemezsiniz, sadece çakışmayı belirli bir şekilde çözmek istersiniz.
Sıfırlamaya ve farklı bir strateji ile birleştirme yapmaya da özellikle gerek yoktur. Çakışmalar git tarafından doğru bir şekilde vurgulanmıştır ve diğer tarafın değişikliklerini kabul etme gerekliliği sadece bu dosya içindir.
Bir çakışmadaki birleştirilmemiş bir dosya için git, dosyanın ortak temel, yerel ve uzak sürümlerini dizinde kullanılabilir hale getirir. (Bu sürümler git mergetool
tarafından 3 yönlü bir fark aracında kullanılmak üzere buradan okunur). Bunları görüntülemek için git show
kullanabilirsiniz.
# 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ü harfi harfine kullanmak için çakışmayı çözmenin en basit yolu şudur:
git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb
Ya da git >= 1.6.1 ile:
git checkout --theirs _widget.html.erb