Apakah ada cara untuk menyelesaikan konflik untuk semua file menggunakan checkout --oursdan --theirs? Saya tahu bahwa Anda dapat melakukannya untuk file individual tetapi tidak dapat menemukan cara untuk melakukannya untuk semua.
Apakah ada cara untuk menyelesaikan konflik untuk semua file menggunakan checkout --oursdan --theirs? Saya tahu bahwa Anda dapat melakukannya untuk file individual tetapi tidak dapat menemukan cara untuk melakukannya untuk semua.
Jawaban:
Cukup grep melalui direktori kerja dan kirim hasilnya melalui perintah xargs:
grep -lr '<<<<<<<' . | xargs git checkout --ours
atau
grep -lr '<<<<<<<' . | xargs git checkout --theirs
Bagaimana ini bekerja: grepakan mencari melalui setiap file di direktori saat ini (the .) dan subdirektori secara rekursif ( -rbendera) mencari penanda konflik (string '<<<<<<<')
yang -latau --files-with-matchesbendera menyebabkan grep untuk output hanya nama file di mana string ditemukan. Pemindaian berhenti setelah kecocokan pertama, jadi setiap file yang cocok hanya dikeluarkan satu kali.
Nama file yang cocok kemudian disalurkan ke xargs , sebuah utilitas yang memecah aliran input yang disalurkan menjadi argumen individu untuk git checkout --oursatau--theirs
Selengkapnya di tautan ini .
Karena akan sangat merepotkan jika harus mengetik ini setiap kali di baris perintah, jika Anda sering menggunakannya, mungkin bukan ide yang buruk untuk membuat alias untuk shell pilihan Anda: Bash adalah yang biasa .
Metode ini harus bekerja setidaknya melalui Git versi 2.4.x
git diff --name-only --diff-filter=U.
git status | grep both | awk '{print $3}' | xargs git checkout --[theirs|ours]. Lebih cepat dari grep jika Anda memiliki proyek besar.
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].
Anda bisa -Xoursatau -Xtheirsdengan git mergejuga. Begitu:
git reset --hard HEAD)git merge -Xoursatau git merge -Xtheirs)PENAFIAN: tentu saja Anda hanya dapat memilih satu opsi, -Xoursatau -Xtheirs, gunakan strategi yang berbeda, Anda tentu saja harus membuka file demi file.
Saya tidak tahu apakah ada cara untuk itu checkout, tetapi saya tidak benar-benar berpikir itu sangat berguna: memilih strategi dengan perintah checkout berguna jika Anda menginginkan solusi yang berbeda untuk file yang berbeda, jika tidak gunakan saja pendekatan strategi penggabungan.
--theirsatau --ours-Option untuk git v1.9.4. Pendekatan akan git merge -s recursive -Xtheirs BRANCH.
--theirsdan --ourstidak tersedia juga dengan git 2.2.0. Entah jawaban saya tidak tepat atau tersedia dalam versi git yang lebih lama (jawaban ini cukup lama di zaman TI). Pendekatan yang tepat adalah dengan -X. Saya memperbarui sesuai
git checkout --[ours/theirs] .akan melakukan apa yang Anda inginkan, selama Anda berada di akar semua konflik. ours / theirs hanya mempengaruhi file yang tidak digabungkan jadi Anda tidak perlu grep / menemukan / etc konflik secara khusus.
error: path 'foo/bar/blah' does not have our version.
git diff --name-only --diff-filter=U | xargs git checkout --theirs
Sepertinya melakukan pekerjaan itu. Perhatikan bahwa Anda harus di-cd ke direktori root dari git repo untuk mencapai ini.
Jika ada orang lain yang ingin menimpa semuanya dari satu cabang (katakanlah master) dengan konten yang lain, ada cara yang lebih mudah:
git merge origin/master --strategy=ours
Terima kasih untuk https://stackoverflow.com/a/1295232/560114
Atau sebaliknya, lihat Apakah ada versi "mereka" dari "git merge -s ours"?
git checkout --ours -- .bekerja? The.berarti direktori saat ini, bila diterapkan dari akar direktori kerja, sehingga pada dasarnya berarti seluruh direktori kerja. Tidak yakin apakah itu akan berfungsi dengan--oursbendera, dan saya tidak yakin bagaimana itu akan menangani konflik file yang dihapus atau diganti namanya.