git checkout
--ours
yerel olarak sahip olduğunuz dosyanın sürümünü kontrol etme seçeneğine sahiptir (aksine --theirs
, çektiğiniz sürümdür). Sen geçebilir .
için git checkout
ağaçtaki her şeyi kontrol etmek onu anlatmak için. Ardından, anlaşmazlıkları çözülmüş olarak işaretlemeniz gerekir, bu git add
işlemle yapabileceğiniz ve işinizi tamamladıktan sonra işinize devam edebilirsiniz:
git checkout --ours . # checkout our local version of all files
git add -u # mark all conflicted files as merged
git commit # commit the merge
Not .
içinde git checkout
komuta. Bu çok önemli ve kaçırması kolay. git checkout
iki modu vardır; biri dal değiştirir ve diğeri dosyaları çalışma kopyasına dizinden kontrol eder (bazen ilk olarak başka bir revizyondan dizine çeker). Nasıl ayırt edileceği, bir dosya adı geçirip geçirmemenizdir; bir dosya adını geçmediyseniz, dalları değiştirmeye çalışır (bir dalı da geçmezseniz, sadece geçerli dalı tekrar kontrol etmeyi dener), ancak değiştirilmiş dosyalar varsa bunu yapmayı reddeder bu etkili olur. Bu nedenle, varolan dosyaların üzerine yazılacak bir davranış istiyorsanız .
, ikinci davranışı almak için bir dosya adı veya dosya adı girmeniz gerekir git checkout
.
İle dengelemek için, bir dosya içinde geçerken Aynı zamanda olması iyi bir alışkanlık --
gibi git checkout --ours -- <filename>
. Bunu yapmazsanız ve dosya adı bir dalın veya etiketin adıyla eşleşirse Git, dosya adını kontrol etmek yerine bu düzeltmeyi kontrol etmek istediğinizi düşünür ve bu nedenle checkout
komutun ilk formunu kullanın .
Git'te çatışmaların ve birleşmenin nasıl işlediğini biraz daha genişleteceğim . Başkasının kodunu birleştirdiğinizde (çekme sırasında da olur; çekme aslında bir getirme ve ardından birleştirme işlemidir), birkaç olası durum vardır.
En basit olanı aynı revizyonda olmanızdır. Bu durumda, "zaten güncel "siniz ve hiçbir şey olmuyor.
Başka bir olasılık, revizyonlarının basitçe sizin bir soyundan gelmesidir, bu durumda varsayılan olarak birleştirme gerçekleşmeden HEAD
sadece taahhütlerine güncellenen bir "hızlı ileri birleştirme" ye sahip olursunuz (bu, kullanarak bir birleştirme kaydetmek istiyorum --no-ff
).
Ardından, iki revizyonu birleştirmeniz gereken durumlara girersiniz. Bu durumda, iki olası sonuç vardır. Birincisi, birleşmenin temiz bir şekilde gerçekleşmesidir; tüm değişiklikler farklı dosyalardadır veya aynı dosyalardadır, ancak her iki değişiklik kümesinin de sorunsuz bir şekilde uygulanabileceği kadar uzaktır. Eğer bu devre dışı olsa Varsayılan olarak, temiz bir birleştirme olduğunda, otomatik olarak, kararlıdır --no-commit
işlevi adlandırmak eğer düzenlemek gerekiyorsa bunu önceden (örneğin foo
üzere bar
ve başkasının aramaları bu yeni kodu ekler foo
, bu temiz birleştirilecek , ancak kırık bir ağaç üretin, bu nedenle herhangi bir kırık taahhütten kaçınmak için birleştirme taahhüdünün bir parçası olarak bunu temizlemek isteyebilirsiniz).
Son olasılık, gerçek bir birleşme ve çatışmaların olmasıdır. Bu durumda, Git kadar birleştirme olabildiğince yapacak ve çatışma belirteçleri (ile üretim dosyaları <<<<<<<
, =======
ve >>>>>>>
sizin çalışma kopyası). Dizinde ("hazırlama alanı" olarak da bilinir; dosyaların git add
taahhütte bulunmadan önce saklandığı yer ), her dosyanın çakışmalı 3 sürümüne sahip olacaksınız; dosyanın birleştirdiğiniz iki dalın atasından orijinal sürümü, birinden gelen sürüm HEAD
(birleştirme tarafınız) ve uzak daldan sürüm var.
Çakışmayı çözmek için, çalışma kopyanızdaki dosyayı düzenleyebilir, çakışma işaretleyicilerini kaldırabilir ve kodu çalışacak şekilde düzeltebilirsiniz. Veya, bir ya da birleştirme diğer taraftan, kullanmaktan sürümünü kontrol edebilirsiniz git checkout --ours
ya git checkout --theirs
. Dosyayı istediğiniz duruma getirdikten sonra, dosyayı birleştirmeyi tamamladığınızı ve dosyanın kullanılmaya hazır olduğunu belirtirsiniz git add
ve ardından birleştirmeyi gerçekleştirebilirsiniz git commit
.