Eu só preciso de uma lista simples de arquivos em conflito .
Existe algo mais simples que:
git ls-files -u | cut -f 2 | sort -u
ou:
git ls-files -u | awk '{print $4}' | sort | uniq
Eu acho que eu poderia criar um alias
jeito prático para isso, no entanto, queria saber como os profissionais fazem isso. Eu o usaria para escrever loops de shell, por exemplo, para resolver automaticamente conflitos, etc. Talvez substitua esse loop conectando-o mergetool.cmd
?
git
git-merge
git-merge-conflict
ingerir
fonte
fonte
git rebase --continue
irá listar os arquivos com conflitos (se houver algum)git rebase --continue
não lista os conflitos, só me disse para corrigi-los (git versão 2.21.0)Respostas:
fonte
git config --global alias.conflicts "diff --name-only --diff-filter=U"
git status
?git conflicts
git diff --check
funciona melhor.git diff --check
mostrará a lista de arquivos contendo marcadores de conflito, incluindo números de linha .
Por exemplo:
fonte: https://ardalis.com/detect-git-conflict-markers
fonte
git diff --check
me contando sobre outros problemas (menos graves) também, como espaços em branco, assim que umgit diff --check | grep -i conflict
poderia estar em ordem para o caso do OPTentando responder minha pergunta:
Não, não parece haver nenhuma maneira mais simples do que a da questão, pronta para uso.
Depois de digitar isso muitas vezes, colei o menor em um arquivo executável chamado 'git-conflitos', tornado acessível ao git, agora posso:
git conflicts
obter a lista que eu queria.Atualização: como Richard sugere, você pode configurar um alias do git, como alternativa ao executável
Uma vantagem de usar o executável sobre o alias é que você pode compartilhar esse script com os membros da equipe (em uma parte bin dir do repo).
fonte
git config --global alias.conflicts "!git ls-files -u | cut -f 2 | sort -u"
(o! Significa executar este comando shell, em vez de apenas um comando git).!
será interpretado pelo seu shell:git config --global alias.conflicts '!git ls-files -u | cut -f 2 | sort -u'
Aqui está uma maneira infalível:
fonte
grep -H -r "<<<<<<< HEAD" .
c
bom resultado também a contagem de conflitos! Uma observação é que eu usaria sinalizadores,-Hrn
isso também fornecerá informações sobre o número da linha.[<=>]{7}
vez disso. (Pode ser necessário-E
sinalizar para que isso funcione no grep.) Ou,<{7}
se você não estiver preocupado com os marcadores de mesclagem pendentes ou se quiser contar os conflitos. (Você também pode usargit grep
- então você não precisa da-r
bandeira.)git status
exibe "ambos modificados" ao lado de arquivos que apresentam conflitos em vez de "modificados" ou "novo arquivo" etc.fonte
fonte
^U
para começar tudo com UDD, AU, UD, UA, DU, AA, UU
DU
Isso funciona para mim:
git grep '<<<<<<< HEAD'
ou
git grep '<<<<<<< HEAD' | less -N
fonte
você pode bater
git ls-files -u
na sua linha de comando, lista os arquivos com conflitosfonte
Se você tentar confirmar, e se houver conflitos, o git fornecerá a lista dos conflitos não resolvidos no momento ... mas não como uma lista simples. Isso geralmente é o que você deseja ao trabalhar interativamente, porque a lista fica mais curta à medida que você corrige os conflitos.
fonte
Talvez isso tenha sido adicionado ao Git, mas os arquivos que ainda precisam ser resolvidos estão listados na mensagem de status (status do git) assim:
Observe que esta é a seção Caminhos não imersos.
fonte
Supondo que você saiba onde está seu diretório raiz do git, $ {GIT_ROOT}, você pode fazer,
fonte
Eu sempre usei
git status
.pode adicionar
awk
no final para obter apenas os nomes dos arquivosgit status -s | grep ^U | awk '{print $2}'
fonte
Meus 2 centavos aqui (mesmo quando há muitas respostas legais / úteis)
Eu criei esse alias no meu
.gitconfig
que vai me mostrar apenas os nomes dos arquivos com conflitos ... não todo o caminho :)
fonte
Aqui está o que eu uso em uma lista de arquivos modificados adequados para substituição de linha de comando no bash
Para editar a lista, use
$(cmd)
substituição.Não funciona se os nomes dos arquivos tiverem espaços. Tentei usar
sed
para escapar ou citar os espaços e a lista de saída parecia correta, mas a$()
substituição ainda não se comportou como desejado.fonte
O utilitário git wizard https://github.com/makelinux/git-wizard conta separadamente as alterações conflitantes não resolvidas (colisões) e os arquivos não imersos. Os conflitos devem ser resolvidos manualmente ou com a fusão. Alterações não-resolvidas resolvidas podem ser adicionadas e confirmadas normalmente com o git rebase --continue.
fonte
ligeira variação da resposta de Charles Bailey que fornece mais informações:
fonte
Conforme destacado em outras respostas, podemos simplesmente usar o comando git status e procurar os arquivos listados em Caminhos não imersos:
fonte