web-dev-qa-db-ja.com

Gitで競合ファイルを一覧表示する最も簡単な方法は何ですか?

私は conflict の単純なリストが必要です。

より単純なものはありますか。

git ls-files -u  | cut -f 2 | sort -u

または

git ls-files -u  | awk '{print $4}' | sort | uniq

私はそのために便利なaliasを設定することができたと思いますが、プロがそれをどのように行うか疑問に思いました。私はそれをシェルループを書くのに使いたいと思います。競合を自動解決するためなど。そのループをmergetool.cmdに差し込むことで置き換えることができるでしょうか。

581
inger
git diff --name-only --diff-filter=U
1021
CB Bailey

これはばかげたやり方です:

grep -H -r "<<<<<<< HEAD" /path/to/project/dir
20
Jones Agyemang

git statusは、 "modified"や "new file"などではなく、競合のあるファイルの隣に "both modified"を表示します。

18
Rafa

git diff --check

競合マーカー行番号を含むを含むファイルのリストが表示されます。

例えば:

> git diff --check
index-localhost.html:85: leftover conflict marker
index-localhost.html:87: leftover conflict marker
index-localhost.html:89: leftover conflict marker
index.html:85: leftover conflict marker
index.html:87: leftover conflict marker
index.html:89: leftover conflict marker

ソース: https://ardalis.com/detect-git-conflict-markers

17
cnlevy
git status --short | grep "^UU "
17
mda

これは私のために働く:

git grep '<<<<<<< HEAD'

または

git grep '<<<<<<< HEAD' | less -N

11
Eric Wang

コマンドラインでgit ls-files -uを打つと競合が発生しているファイルがリストされます。

10

これがGitに追加された可能性がありますが、まだ解決されていないファイルが次のようにステータスメッセージ(git status)に表示されます。

#
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      syssw/target/libs/makefile
#

これがUnmerged pathsセクションだと注意します。

3
Patrick O'Hara

もしあなたがコミットしようとし、そして衝突があるなら、gitはあなたに現在未解決の衝突のリストを与えるでしょう…しかし明白なリストとしてではありません。これは通常、対話的に作業するときに必要なものです。競合を修正するとリストが短くなるためです。

2
Tel

あなたのgitルートディレクトリ$ {GIT_ROOT}がどこにあるか知っていると仮定すれば、

 cat ${GIT_ROOT}/.git/MERGE_MSG | sed '1,/Conflicts/d'

私はいつもgit statusを使いました。

ファイル名だけを得るために最後にawkを追加することができます

git status -s | grep ^U | awk '{print $2}'

0
Ascherer

これが私がbashでのコマンドライン置換に適した修正ファイルをリストするのに使っているものです

git diff --numstat -b -w | grep ^[1-9] | cut -f 3

リストを編集するには$(cmd)置換を使います。

vi $(git diff --numstat -b -w | grep ^[1-9] | cut -f 3)

ファイル名にスペースが含まれていると機能しません。スペースをエスケープまたは引用符で囲むためにsedを使用しようとしましたが、出力リストは正しく見えましたが、$()置換はまだ望みどおりに動作しませんでした。

0
Darrel Lee

私の2セントがここにあります(クールで実用的な反応がたくさんあるときでさえ)

私は.gitconfigでこのエイリアスを作成しました

[alias]
 ...
 conflicts = !git diff --name-only --diff-filter=U | grep -oE '[^/ ]+$'

これは、衝突のあるファイルの名前だけを表示します。パス全体ではありません。

0
Manu

他の答えで強調されているように、私たちは単にコマンド git status を使い、次にUnmerged pathsの下にリストされたファイルを探すことができます。

0
sandesh