代码之家  ›  专栏  ›  技术社区  ›  inger

获取冲突文件列表的最简单方法是什么?

  •  569
  • inger  · 技术社区  · 14 年前

    我只需要一个冲突文件的简单列表。

    有什么比这简单的吗?

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

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

    ?

    我想我可以为此设置一个方便的别名,但是我想知道专业人士是如何做到的。我将使用它来编写shell循环,例如自动解决冲突等。也许可以通过插入mergetool.cmd来替换那个循环?

    16 回复  |  直到 5 年前
        1
  •  989
  •   CB Bailey    12 年前
    git diff --name-only --diff-filter=U
    
        2
  •  34
  •   inger    12 年前

    试图回答我的问题:

    不,似乎没有比这个问题更简单的方法了,开箱即用。

    在多次输入后,只需将较短的文件粘贴到名为“git conflicts”的可执行文件中,使git可以访问该文件,现在我可以: git conflicts 为了得到我想要的清单。

    更新:正如Richard所建议的,您可以设置一个git别名,作为可执行文件的替代方案。

    git config --global alias.conflicts '!git ls-files -u | cut -f 2 | sort -u'
    

    与别名相比,使用可执行文件的一个优点是,您可以与团队成员(在repo的bin dir部分)共享该脚本。

        3
  •  21
  •   Jones Agyemang    11 年前

    以下是一个简单的方法:

    grep -H -r "<<<<<<< HEAD" /path/to/project/dir
    
        4
  •  17
  •   Vadim Kotov First Zero    7 年前

    git status 在有冲突的文件旁边显示“both modified”,而不是“modified”或“new file”等

        5
  •  16
  •   mda    13 年前
    git status --short | grep "^UU "
    
        6
  •  15
  •   cnlevy    6 年前

    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

        7
  •  12
  •   Matthias Pandu    8 年前

    这对我很有用:

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

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

        8
  •  10
  •   Emil Reña Enriquez    9 年前

    你可能会打 git ls-files -u 在命令行中,它列出有冲突的文件

        9
  •  3
  •   Patrick O'Hara    9 年前

    可能这已经被添加到Git中,但是还没有解析的文件在状态消息(Git状态)中列出,如下所示:

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

    请注意,这是未合并的路径部分。

        10
  •  2
  •   Tel    13 年前

    如果您试图提交,并且存在冲突,那么Git将为您提供当前未解决的冲突的列表…但不是简单的清单。这通常是您在交互工作时需要的,因为当您修复冲突时,列表会变短。

        11
  •  0
  •   Ascherer    11 年前

    我一直在用 git status .

    可以添加 awk 最后只得到文件名

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

        12
  •  0
  •   sandesh    6 年前

    如其他答案所强调的,我们可以简单地使用命令 GIT状态 然后查找未合并路径下列出的文件:

        13
  •  0
  •   Tzunghsing David Wong    6 年前

    假设您知道Git根目录,$Git根目录在哪里,您可以这样做,

     cat ${GIT_ROOT}/.git/MERGE_MSG | sed '1,/Conflicts/d'
    
        14
  •  0
  •   Manu Artero Rajeev Dutta    6 年前

    我这里的2美分(即使有很多酷的/工作的回答)

    我在我的 .gitconfig

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

    它将只显示有冲突的文件的名称…不是他们的全部道路:)

        15
  •  0
  •   Darrel Lee    5 年前

    下面是我在bash中使用的列表修改文件,这些文件适合于命令行替换

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

    要编辑列表,请使用$(cmd)替换。

    vi$(Git diff--数字统计-B-W grep^[1-9]剪切-F 3)

    如果文件名有空格,则不起作用。我试图使用sed来转义或引用空格,输出列表看起来是正确的,但它的$()替换行为仍然不符合要求。

        16
  •  -1
  •   taj    11 年前

    查尔斯·贝利回答的细微变化,提供了更多信息:

    git diff --name-only --diff-filter=U | xargs git status