Ödeme kullanan tüm dosyalar için çatışmayı çözmek için bir yol var mı --ours
ve --theirs
? Bunu tek tek dosyalar için yapabileceğinizi ancak herkes için yapmanın bir yolunu bulamadığınızı biliyorum.
Ödeme kullanan tüm dosyalar için çatışmayı çözmek için bir yol var mı --ours
ve --theirs
? Bunu tek tek dosyalar için yapabileceğinizi ancak herkes için yapmanın bir yolunu bulamadığınızı biliyorum.
Yanıtlar:
Sadece çalışma dizininde gezinin ve çıktıyı xargs komutuyla gönderin:
grep -lr '<<<<<<<' . | xargs git checkout --ours
veya
grep -lr '<<<<<<<' . | xargs git checkout --theirs
Bu nasıl çalışır: grep
geçerli dizindeki ( .
) ve alt dizinlerdeki ( -r
bayrak) her dosyada çakışma işaretlerini ('<<<<<<<') arayarak tekrar tekrar arayacaktır.
-l
veya --files-with-matches
bayrak çıkışına dize bulunmuştur sadece dosya adını grep neden olur. Tarama, ilk eşleşmeden sonra durur, bu nedenle her eşleşen dosya yalnızca bir kez çıkarılır.
Eşleşen dosya isimleri sonra edilir borulu için Xargs için tek tek argümanları içine giriş akışı, kırar borulu bir yardımcı git checkout --ours
ya da--theirs
Bu bağlantıda daha fazlası .
Bunu her seferinde komut satırına yazmanız çok sakıncalı olacağından, kendinizi çok fazla kullanıyorsanız , seçtiğiniz kabuğunuz için bir takma ad oluşturmak kötü bir fikir olmayabilir : Bash olağan olanıdır. .
Bu yöntem, en az Git 2.4.x sürümlerinde çalışmalıdır.
git diff --name-only --diff-filter=U
.
git status | grep both | awk '{print $3}' | xargs git checkout --[theirs|ours]
. Büyük bir projeniz varsa grep etmekten daha hızlı.
CONFLICT (rename/rename): Rename "a.txt"->"c.txt" in branch "HEAD" rename "a.txt"->"b.txt" in "master"
git status --porcelain | egrep '^UU' | cut -d ' ' -f 2 |xargs git checkout --[theirs|ours]
.
Şunları yapabilirsiniz -Xours
ya -Xtheirs
ile git merge
de. Yani:
git reset --hard HEAD
)git merge -Xours
veya git merge -Xtheirs
)SORUMLULUK REDDİ: Tabii ki tek bir seçenek seçebilirsin, ya -Xours
da -Xtheirs
farklı bir strateji kullanabilirsin, tabii ki dosyaya göre gitmelisin.
Bunun bir yolu var mı bilmiyorum checkout
, ama gerçekten çok yararlı olduğunu düşünmüyorum: farklı dosyalar için farklı çözümler istiyorsanız, checkout komutuyla stratejiyi seçmek yararlıdır, aksi takdirde sadece birleştirme stratejisi yaklaşımını tercih edin.
--theirs
ya --ours
git v1.9.4 için -Seçeneği. Bir yaklaşım olurdu git merge -s recursive -Xtheirs BRANCH
.
--theirs
ve --ours
git ile kullanılamaz 2.2.0
. Ya cevabım kesin değildi ya da daha eski git sürümünde mevcuttu (bu cevap BT çağında oldukça eskidir). Doğru yaklaşım ile -X
. Buna göre güncelleme
git checkout --[ours/theirs] .
tüm çatışmaların kökeninde olduğunuz sürece istediğinizi yapacaksınız. bizimki / onlarınki yalnızca birleştirilmemiş dosyaları etkiler, bu nedenle özellikle çatışmaları grep / find / etc zorunda kalmamalısınız.
error: path 'foo/bar/blah' does not have our version
.
git diff --name-only --diff-filter=U | xargs git checkout --theirs
İşi yapıyor gibi görünüyor. Bunu başarmak için git deposunun kök dizinine cd'lenmeniz gerektiğine dikkat edin.
Bir başkası, bir daldaki her şeyin (örneğin usta) üzerine diğerinin içeriğini yazmak istemesi durumunda, daha kolay bir yol var:
git merge origin/master --strategy=ours
Https://stackoverflow.com/a/1295232/560114 sayesinde
Ya da tam tersi için, bkz . "Git merge -s bizim" "onların" sürümü var mı?
git checkout --ours -- .
? Bu.
, çalışma dizini kökünden uygulandığında geçerli dizin anlamına gelir, bu nedenle temelde tüm çalışma dizini anlamına gelir. Bunun--ours
bayrakla çalışıp çalışmayacağından emin değilim ve silinen veya yeniden adlandırılan dosya çakışmalarını nasıl ele alacağından emin değilim.