Saya hanya perlu daftar file yang konflik .
Apakah ada yang lebih sederhana daripada:
git ls-files -u | cut -f 2 | sort -u
atau:
git ls-files -u | awk '{print $4}' | sort | uniq
Saya kira saya bisa mengatur yang berguna alias
untuk itu, namun bertanya-tanya bagaimana pro melakukannya. Saya akan menggunakannya untuk menulis loop shell misalnya untuk menyelesaikan konflik secara otomatis, dll. Mungkin mengganti loop itu dengan cara menghubungkannya mergetool.cmd
?
git
git-merge
git-merge-conflict
inger
sumber
sumber
git rebase --continue
akan mencantumkan file dengan konflik (jika ada)git rebase --continue
tidak mencantumkan konflik, hanya mengatakan kepada saya untuk memperbaikinya (git versi 2.21.0)Jawaban:
sumber
git config --global alias.conflicts "diff --name-only --diff-filter=U"
git status
?git conflicts
git diff --check
bekerja lebih baik.git diff --check
akan menampilkan daftar file yang mengandung penanda konflik termasuk nomor baris .
Sebagai contoh:
sumber: https://ardalis.com/detect-git-conflict-markers
sumber
git diff --check
mengatakan kepada saya tentang masalah lain (kurang serius) juga, seperti tertinggal spasi, jadigit diff --check | grep -i conflict
mungkin dalam rangka untuk kasus OPMencoba menjawab pertanyaan saya:
Tidak, sepertinya tidak ada cara yang lebih sederhana daripada yang ada di pertanyaan, out of box.
Setelah mengetik itu terlalu sering, hanya menyisipkan yang lebih pendek ke dalam file yang dapat dieksekusi bernama 'git-konflik', dibuat dapat diakses oleh git, sekarang saya bisa saja:
git conflicts
untuk mendapatkan daftar yang saya inginkan.Pembaruan: seperti yang disarankan Richard, Anda dapat mengatur alias git, sebagai alternatif untuk dieksekusi
Keuntungan menggunakan executable di atas alias adalah Anda dapat berbagi skrip itu dengan anggota tim (di bagian bin dir repo).
sumber
git config --global alias.conflicts "!git ls-files -u | cut -f 2 | sort -u"
(! Artinya menjalankan perintah shell ini, bukan hanya perintah git).!
akan ditafsirkan oleh shell Anda:git config --global alias.conflicts '!git ls-files -u | cut -f 2 | sort -u'
Ini cara yang sangat mudah:
sumber
grep -H -r "<<<<<<< HEAD" .
c
hasil konflik dengan baik juga! Satu catatan adalah bahwa saya akan menggunakan bendera-Hrn
ini juga akan memberikan informasi nomor baris.[<=>]{7}
daripada ini. (Mungkin perlu-E
bendera untuk itu bekerja di grep.) Atau,<{7}
jika Anda tidak khawatir tentang menggantung penanda gabungan atau ingin menghitung konflik. (Anda juga dapat menggunakangit grep
- maka Anda tidak perlu-r
bendera.)git status
menampilkan "keduanya dimodifikasi" di sebelah file yang memiliki konflik alih-alih "dimodifikasi" atau "file baru", dllsumber
sumber
^U
untuk memulai semuanya dengan UDD, AU, UD, UA, DU, AA, UU
DU
Ini bekerja untuk saya:
git grep '<<<<<<< HEAD'
atau
git grep '<<<<<<< HEAD' | less -N
sumber
Anda dapat menekan
git ls-files -u
pada baris perintah Anda itu daftar file dengan konfliksumber
Jika Anda mencoba untuk melakukan, dan jika ada konflik, maka git akan memberi Anda daftar konflik yang saat ini belum terselesaikan ... tetapi tidak sebagai daftar biasa. Ini biasanya yang Anda inginkan ketika bekerja secara interaktif karena daftar semakin pendek saat Anda memperbaiki konflik.
sumber
Mungkin ini telah ditambahkan ke Git, tetapi file yang belum diselesaikan tercantum dalam pesan status (status git) seperti ini:
Perhatikan bahwa ini adalah bagian lintasan Unmerged.
sumber
Dengan asumsi Anda tahu di mana direktori root git Anda, $ {GIT_ROOT}, adalah, Anda dapat melakukannya,
sumber
Saya selalu hanya digunakan
git status
.dapat menambahkan
awk
di akhir untuk mendapatkan hanya nama filegit status -s | grep ^U | awk '{print $2}'
sumber
2 sen saya di sini (bahkan ketika ada banyak respons keren / kerja)
Saya membuat alias ini di blog saya
.gitconfig
yang akan menunjukkan kepada saya hanya nama-nama file dengan konflik ... bukan seluruh jalur mereka :)
sumber
Inilah yang saya gunakan untuk daftar file yang dimodifikasi yang cocok untuk substitusi baris perintah di bash
Untuk mengedit daftar gunakan
$(cmd)
substitusi.Tidak berfungsi jika nama file memiliki spasi. Saya mencoba menggunakan
sed
untuk melarikan diri atau mengutip spasi dan daftar output tampak benar, tetapi$()
substitusi masih tidak berperilaku seperti yang diinginkan.sumber
Utilitas git wizard https://github.com/makelinux/git-wizard menghitung secara terpisah perubahan yang bentrok (tabrakan) dan file yang tidak terpecahkan secara terpisah. Konflik harus diselesaikan secara manual atau dengan mergetool. Menyelesaikan perubahan yang tidak dihapus dapat saya tambahkan dan lakukan biasanya dengan git rebase --continue.
sumber
sedikit variasi dari jawaban Charles Bailey yang memberikan informasi lebih lanjut:
sumber
Seperti yang disorot dalam jawaban lain, kita cukup menggunakan status perintah git dan kemudian mencari file yang terdaftar di bawah lintasan yang tidak diolah:
sumber