Git'te 'ikisi de eklenmiş' birleştirme çakışması çözülüyor mu?


138

Git'te yeniden temel alıyorum ve aldığım bir çatışma 'her ikisi de eklendi' - yani, tam olarak aynı dosya adı şubemde ve dayandığım dalda bağımsız olarak eklendi. git statusbana söyler:

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both added:         src/MyFile.cs

Sorum şu, bunu nasıl çözebilirim? Bir birleştirme aracı kullanmalı mıyım yoksa bunu yalnızca komut satırından yapabilmemin bir yolu var mı? Eğer ben git rm src/MyFile.cs, git hangi dosya sürümünü kaldırmak istediğimi ve hangisini saklamak istediğimi nasıl bilebilir?

Yanıtlar:


139

git rmGit komutunu kullanırsanız bu yolun tüm sürümleri dizinden kaldırılır, böylece çözümleme işleminiz her iki sürümde de kalmaz.

Üzerinde git checkout --ours src/MyFile.cstemel aldığınız git checkout --theirs src/MyFile.csşubeden sürümü seçmek veya temel aldığınız şubeden sürümü seçmek için kullanabilirsiniz .

Bir karışım istiyorsanız, bir birleştirme aracı kullanmanız veya manuel olarak düzenlemeniz gerekir.


1
Teşekkürler. Ve ben sadece birleştirme aracının çalışma nedeninin git birleştirme için .LOCAL ve .REMOTE dosyalarını oluşturmak, ancak .BASE dosyasını değil çünkü olduğunu fark ettim. Ben sadece boş bir .BASE dosyası oluşturmak gerektiğini düşünüyorum. Boş .BASE dosyasını el ile oluşturursanız, birleştirme aracı iyi çalışır.
Jez


1
Peki bunun git'in son bir sürümünde düzeltileceğini mi söylüyorsunuz?
Jez

1
@Jez: Git sürümlerinde> = 1.7.9.1 git.kernel.org/?p=git/…
CB Bailey

21
@Tom cevaplarından: Yaparken ... git checkout --ours someFile Git durumu yaparken hiçbir şey yapmamış gibi görünebilir. Bunu daha sonra yapmayı unutmayın. git add someFile git status
pec

72

Bazen dosyanın nereden geleceğini belirlemek için --theirsve --oursseçeneklerini kullanarak kafa karıştırıcı buluyorum . Çoğu zaman benim atılan şubede olacak ben de atıfta bulunuyorum --theirs!

Ayrıca kullanabilirsiniz git checkout <tree-ish> -- src/MyFile.cs

Burada, <tree-ish>saklamak istediğiniz dosyayı içeren şube adı veya commit-id ile değiştirilebilir.

git checkout 6a363d8 -- src/MyFile.cs

git checkout my_branch -- src/MyFile.cs

git checkout HEAD -- src/MyFile.cs


42

Yaparken ...

git checkout --ours someFile

Git durumu yapılırken hiçbir şey yapmamış gibi görünebilir.

Bunu daha sonra yapmayı unutmayın.

git add someFile
git status
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.