it-swarm-tr.com

Bir birleşme çatışmasıyla karşılaştım. Birleştirmeyi nasıl iptal edebilirim?

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

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 benimkilerin kötü olduğunu biliyorum, bu yüzden tüm değişikliklerim iptal edilmeli. Bunu nasıl yapabilirim?

2199
Gwyn Morfey

pull'nız başarısız olduğundan, HEAD (HEAD^ değil) şubenizdeki son "geçerli" işlemdir:

git reset --hard HEAD

İstediğiniz diğer parça, değişikliklerinin değişikliklerinizi geçersiz kılması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, bu mesajda Junio ​​Hamano (Git koruyucu) tarafından açıklandığı gibi kaldırılmıştır. link 'de belirtildiği gibi, bunun yerine:

git fetch Origin
git reset --hard Origin
1956
Pat Notz

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

Ayrıca, @Michael Johnson'ın belirttiği gibi, git sürümünüz>> 1.7.4 ise, git merge --abort öğesini de kullanabilirsiniz.

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

git birleştirme man sayfasından

git merge --abort, git reset --merge mevcut olduğunda MERGE_HEAD değerine eşittir.

Birleştirme işlemi devam ederken MERGE_HEAD var.

Ayrıca, bir birleştirmeye başladığınızda yapılan değişikliklerle ilgili olarak:

Birleştirmeye başlamadan önce yapmak istemediğiniz değişiklikleriniz varsa, birleştirmeden önce bunları git stash ve birleştirmeyi bitirdikten veya iptal ettikten sonra git stash pop yapın.

1766
Carl
git merge --abort

Mevcut çatışma çözme sürecini iptal edin ve birleştirme öncesi durumu yeniden oluşturmaya çalışın.

Birleştirme başladığında henüz tamamlanmamış iş değişikliği değişiklikleri varsa, git merge --abort bazı durumlarda bu değişiklikleri yeniden yapamaz. Bu nedenle, git birleştirme işlemine başlamadan önce değişikliklerinizi her zaman yapmanız veya saklamanız önerilir.

git merge --abort, git reset --merge mevcut olduğunda MERGE_HEAD değerine eşittir.

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

440
ignis

Sanırım ihtiyacın olan git reset.

git revert 'ın svn revert' den çok farklı bir şey anlamına geldiğine dikkat edin - Subversion'da geri döndürme (taahüt edilmemiş) değişikliklerinizi atar, dosyayı mevcut sürümüne depodan geri döndürür, oysa git revert bir taahhüdü "geri alır".

git resetsvn revert eşdeğerini yapmalıdır, yani istenmeyen değişikliklerinizi atın.

83
David Precious

Bu özel kullanım durumunda, birleştirme işlemini iptal etmek istemezsiniz, anlaşmazlığı belirli bir şekilde çözebilirsiniz.

Ayrıca, farklı bir stratejiyle birleştirme işlemini sıfırlamak ve gerçekleştirmek için özel bir gereksinim yoktur. Çatışmalar git tarafından doğru bir şekilde vurgulandı ve diğer tarafların değişikliklerini kabul etme gerekliliği sadece bu dosya için.

Bir çakışmadaki ayrılmamış bir dosya için git, dosyanın dizindeki ortak temel, yerel ve uzak sürümlerini kullanılabilir hale getirir. (Bu, 3 yönlü bir diff aracında git mergetool ile kullanım için okunduğu yerdir.) 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ü verbatim kullanmak için çatışma çö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
74
CB Bailey

Bu çok basit.

git merge --abort

Git, bu tür bir sorunla karşılaştığınızda size çözümü gösterir ve git status komutunu çalıştırın.

git status

Umarım bu insanlara yardım eder.

58

Yorumlar, git reset --merge'un git merge --abort için bir diğer ad olduğunu öne sürdüğü için, git merge --abort öğesinin yalnızca bir git reset --merge bulunduğu için MERGE_HEAD ile eşdeğer olduğunu fark etmek önemlidir. Bu birleştirme komutu için git yardımından okunabilir.

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

Başarısız bir birleştirme işleminden sonra, MERGE_HEAD olmadığında, başarısız birleştirme git reset --merge ile geri alınabilir, ancak git merge --abort, ile olması gerekmez, böylece aynı şey için yalnızca eski ve yeni sözdizimi değillerdir .

Şahsen ben tanımlanmış olana benzer senaryolar için git reset --merge çok daha güçlü buluyorum ve genel olarak başarısız birleşme.

32
Martin G

Ve eğer birleştirme çatışmasıyla sonuçlanırsanız ve yapacak bir işiniz yoksa, yine de aşağıdaki komutların hepsini uyguladıktan sonra hala birleştirme hatası görüntüleniyorsa,

git reset --hard HEAD
git pull --strategy=theirs remote_branch
git fetch Origin
git reset --hard Origin

lütfen kaldır

.git\index.lock

[kurtarma durumunda başka bir konuma yapıştır yapıştır]] ve istediğiniz sürüme bağlı olarak aşağıdaki komutlardan birini girin.

git reset --hard HEAD
git reset --hard Origin

Umarım yardımcı olur!!!

21
Nirav Mehta

Git 1.6.1.3'ten beri git checkout / bir birleştirmenin her iki tarafından da ödeme yapmayı başardı:

git checkout --theirs _widget.html.erb
17
Alain O'Dea

Çalışma kopyasının durumunu koruyan bir alternatif:

git stash
git merge --abort
git stash pop

Genel olarak buna karşı tavsiyem var, çünkü Subversion ile birleşme gibi etkin bir şekilde takip ediyor, bu da şube ilişkilerini aşağıdaki taahhütte atıyor.

15
Alain O'Dea

Bunun gibi bir senaryoda, git fetch ve git pull yaptım, sonra yukarı akış dalının ana dal olmadığını, bunun da istenmeyen çatışmalarla sonuçlandığını fark ettim.

git reset -merge 

Bu yerel değişikliklerimi sıfırlamadan geri döndü.

1
naamadheya

Aşağıdakilerin benim için işe yaradığını buldum (birleştirme durumuna geçmek için tek bir dosyayı geri al):

git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset*
1
Malcolm Boekhoff