Git yeniden taban birleştirme çakışması devam edemiyor


131

"Ana" şubeye yetişmek için "dev" i yeniden düzenlemeye çalışıyorum.

$ git checkout dev 
$ git rebase master 
First, rewinding head to replay your work on top of it...
Applying: Corrected compilation problems that came from conversion from SVN.
Using index info to reconstruct a base tree...
M       src/com/....
<stdin>:125: trailing whitespace.
/**
<stdin>:126: trailing whitespace.
 *
<stdin>:127: trailing whitespace.
 */
<stdin>:128: trailing whitespace.
package com....
<stdin>:129: trailing whitespace.

warning: squelched 117 whitespace errors
warning: 122 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging src/com/....
CONFLICT (content): Merge conflict in src/com/...
Failed to merge in the changes.
Patch failed at 0001 Corrected compilation problems that came from conversion from SVN.

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".

$ vi src/com/.....   { fixed the merge issue on one file } 
$ git add -A . 
$ git rebase --continue 
src/com/....: needs merge
You must edit all merge conflicts and then
mark them as resolved using git add
$ vi src/com....      { verified, no >>> or <<< left, no merge markers } 
$ git rebase --continue 
Applying: Corrected compilation problems that came from conversion from SVN.
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".

Herhangi bir fikir?


Not: git rebase --skipa'nın hala düzgün çalışmadığı durumlar vardır . Git 2.0.2'ye (Temmuz 2014) kadar. Aşağıdaki cevabımı
VonC

Yanıtlar:


224

Sıkıştığını gördüğüm birkaç durum var rebase. Birincisi, değişikliklerin geçersiz hale gelmesi (bir taahhütte daha önce yeniden ödemede yapılmış değişiklikler vardır), bu durumda kullanmanız gerekebilir git rebase --skip.

Anlaması oldukça kolay. Eğer yaparsanız git statushiçbir değişiklik göstermemelidir. Eğer öyleyse, atlayın. Eğer durum bu değilse lütfen sayfasının bir kopyasını gönderin git statusve size daha fazla yardımcı olmaya çalışabilirim.


Hayır, öyleydi, vadesi gelen "hiçbir" değişiklik olmadı. Atladım ve daha sonra dosyayı karşılaştırdım, olması gereken şeydi.
awm

Bu, 'git pull - rebase origin master'ımın anlaşmazlıkları çözme ihtiyacı ile atlama arasında bir döngüde sıkışıp kaldığı göründüğünde bana yardımcı oldu. Biraz daha sabrın ardından
düzeldim

3
git status şunu döndürüyor: "Rebase in progress; on <commitnumber> Şu anda '<branchname>' şubesini '<commitnumber>' üzerinde yeniden sıralıyorsunuz. (tüm çakışmalar düzeltildi:" git rebase --continue "komutunu çalıştırın)". git rebase --continue hiçbir değişiklik döndürmez, oysa git rebase --skip do ama benim durumumda bu durumu tekrar tekrar alıyorum. Doğru mu yoksa yanlış bir şeyler mi var?
adi

Teşekkürler. Yaptığım --skipdeğişikliklere devam etmekten daha kötüsünü yapacağından endişeliydim .
jchook

Benim durumumda hem Intellij Idea GUI hem de SourceTree, her dosyanın commit'e eklendiğini git statusgösterirken, değiştirilmiş ancak commit'e eklenmemiş bir dosya olduğunu gösterdi. Performansın add somefile.txtyeniden satışla devam etmesine izin verildi.
azizbekian

16

Bu sorunla karşılaştığım zamanlardan biri, a git commitsonra a git add. Dolayısıyla, aşağıdaki sıra, bahsettiğiniz yeniden ödeme hatasını üretecektir:

git add <file with conflict>
git commit -m "<some message>"
git rebase --continue

Aşağıdaki dizi herhangi bir hata olmadan çalışır ve yeniden temele devam eder:
git add <file with conflict>
git rebase --continue

git add -A"Hepsi" seçeneğinin de benzer bir durum yaratması mümkün olabilir . (Lütfen unutmayın, git konusunda çok deneyimsizim, bu yüzden bu cevap doğru olmayabilir.) Güvende olmak için git rebase --skip, bu durumda da iyi çalışıyor gibi görünüyor.


6

Not: Git 2.0.2 (Temmuz 2014), a'nın git rebase --skiptakılıp kalacağı ve mevcut yeniden temelde devam edemeyeceği bir durumu düzeltti .
Bkz . Commit 95104c7 by brian m. carlson ( bk2204)

rebase--merge: --skiparka arkaya iki çakışma ile düzeltme

Eğer git rebase --mergebir çatışma karşılaştı, --skipertesi da çelişkide tamamlama eğer işe yaramaz . Hiçbir yama aslında atlanır bu yüzden dosya kaçınılmaz döngüsü oluşturur, yeni yama numarası ile güncellenir asla.
msgnum

msgnumCall_merge'deki ilk şey olarak dosyanın değerini güncelleyin .
Bu aynı zamanda Already appliedbir kaydetme atlandığında bir " " mesajını da önler .
Msgnum dosyasının değeri bu durumlarda değişmeden kaldığından, call_merge'ın çağrıldığı diğer bağlamlarda görünür bir değişiklik yoktur.


3
$ vi src/com....      { verified, no >>> or <<< left, no merge markers } 
$ git rebase --continue 

Görünüşe göre git adddeğişikliklerinizi unutmuşsunuz ...


Bu sadece bir "doğrulama" idi, 2. seferde hiçbir değişikliğe gerek yoktu ... git add hemen üstündeydi.
awm

Doğru, git addbirleştirmeyi kullandınız ve sonra devam ettiniz ve başka bir dosyada çakışmalar olduğu için bu işlem durdu, bu yüzden onu da düzeltmeniz gerekiyor. Burada bir şey mi kaçırıyorum?
John Brodie

1
Raporlamanın birleştirilmesi gereken dosya ile aynı. tamam sadece senin için başka bir "git add" yapacağım, ama aynı sonuç.
awm

Teşekkürler! Benim durumum buydu: Çatışmaları çözdüm ama değişiklikleri sahnelemedim.
Kirill
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.