Git uzaktan kumandasından çekerken uzaktan değişiklikleri kullanarak çakışmaları giderin


297

GitHub depodan sunucuma kod çekmeye çalışıyorum, ancak birleştirme çakışmaları nedeniyle çekme başarısız oluyor. Son çekmekten bu yana yerel sunucumda olabilecek değişikliklerin hiçbirini saklamak istemiyorum.

Bu yüzden Git'i beni çatışmalardan rahatsız etmek yerine GitHub'da bulunan sürümün üzerine yazmaya zorlamanın bir yolu var mı?



4
@nvm: Hayır. Bu, üzerine yazılan izlenmeyen dosyalar değil, gerçek birleştirme çakışmalarıyla ilgilidir.
Cascabel

Yanıtlar:


491

Yerel olarak yaptığınız taahhütleri gerçekten atmak istiyorsanız, yani bunları bir daha asla tarihe dahil etmiyorsanız, nasıl çekeceğinizi sormazsınız - birleştirme anlamına gelir ve birleştirmeniz gerekmez. Tek yapmanız gereken şudur:

# fetch from the default remote, origin
git fetch
# reset your current branch (master) to origin's master
git reset --hard origin/master

Şahsen önce mevcut HEAD'inizde bir yedek şube oluşturmanızı tavsiye ederim, böylece bunun kötü bir fikir olduğunu fark ederseniz, izini kaybetmediniz.

Öte yandan, bu taahhütleri tutmak ve başlangıç ​​noktasıyla birleşmiş gibi görünmesini sağlamak ve birleştirmenin sürümleri yalnızca başlangıçtan uzak tutmasına neden olmak istiyorsanız, oursbirleştirme stratejisini kullanabilirsiniz :

# fetch from the default remote, origin
git fetch
# create a branch at your current master
git branch old-master
# reset to origin's master
git reset --hard origin/master
# merge your old master, keeping "our" (origin/master's) content
git merge -s ours old-master

1
Git komutlarının ikinci bloğunda .. ikinci komuttan sonra 'git getirme kaynağı' olmalı mı?
David Tuite

@David: Evet, bir noktada başlangıç ​​noktasından getirmelisiniz. Üzgünüm, bunu örtük olarak gördüm.
Cascabel

2
Bana ve git ;-) söz konusu olduğunda ima edilebilecek hiçbir şey yok. Ciddi olsa da, bir milyon teşekkürler. Cevaplarınız tam olarak aradığım şeydi.
David Tuite

1
Kökeni gerçekten önde ise bu işe yarar mı? olduğu gibi, ileride herhangi bir taahhüdüm yoksa bunu da kullanabilir miyim ve aslında şube hızlı bir şekilde yönlendirilebilir mi?
Jared Forsyth

1
Teşekkürler! Kolay görünmesini sağladı.
sholsinger

138

Nvm ile gösterilen yinelenen bağlantıdan gelen cevabı kullanabilirsiniz.

Veya değişiklikleri kullanarak çatışmaları çözebilirsiniz (ancak uzak sürümle çakışmadıysa değişikliklerinizin bir kısmı korunabilir):

git pull -s recursive -X theirs

3
Benim için çalışmıyor gibi görünüyor. Git git sürüm 1.5.6.5 kullanarak "hata: bilinmeyen anahtar` X "alıyorum. Kararsız bir sürüme yükseltmem gerekiyor mu?
David Tuite

Ayrıca, Antoine, sadece çakışan içeriklerin değil, her şeyin kökeninin versiyonunu almak istiyorsanız, cevabımı görebilirsiniz.
Cascabel

2
@David debian için git'in son bir sürümünü backports.debian.org
adresinden edinebilirsiniz

2
Tam da aradığım şey buydu!
micahblu

2
@CeesTimmerman Doğru değil, en azından son git. Xseçeneği, yalnızca recursiveiki kafa birleştirilirse , birleştirme stratejisine aktarılır , bu nedenle komutunuz şikayet edecektir "Could not find merge strategy 'theirs'. Available strategies are: octopus ours recursive resolve subtree."- utanç verici, çünkü Xconfig (örneğin git config pull.twohead theirs) ' de ayarlanabilir, ancak syapılamaz.
OJFord
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.