Git para resolver o conflito com o uso de --ours / - -los para todos os arquivos

Existe uma maneira de resolver conflitos para todos os arquivos usando checkout --ours e --theirs ? Eu sei que você pode fazer isso para arquivos individuais, mas não conseguiu encontrar uma maneira de fazer isso para todos.

64
14 июля '14 в 21:57 2014-07-14 21:57 exe163 é definido em 14 de julho '14 às 21:57 2014-07-14 21:57
@ 4 respostas

Basta percorrer o diretório de trabalho e enviar o resultado por meio do comando xargs:

 grep -lr '<<<<<<<' . | xargs git checkout --ours 

ou

 grep -lr '<<<<<<<' . | xargs git checkout --theirs 

Como funciona: grep irá procurar por cada arquivo no diretório atual ( . ) E subdiretórios recursivamente (o -r flag), que procura por marcadores de conflito (a linha '<<<<<<<< lt; <<<')

O sinalizador -l ou --files-with-matches faz com que o grep imprima apenas o nome do arquivo no qual a string foi encontrada. A varredura pára após a primeira correspondência, portanto, cada arquivo correspondente é exibido apenas uma vez.

Os nomes de arquivos correspondentes são, então, >> xargs , um utilitário que divide os canais do fluxo de entrada em argumentos separados para o git checkout --ours ou --theirs

Mais sobre este link .

Como seria muito inconveniente inseri-lo toda vez na linha de comando, se você usá-lo com freqüência, pode ser interessante criar um alias para o shell de sua escolha: Bash é normal.

Este método deve funcionar pelo menos no Git versão 2.4.x

61
14 июля '14 в 22:03 2014-07-14 22:03 a resposta é dada por Dmitri em 14 de julho '14 às 22:03 2014-07-14 22:03

Você pode -Xours ou -Xtheirs com git merge . Então:

  • interromper a mesclagem atual (por exemplo, com git reset --hard HEAD )
  • mesclar usando estratégia preferida ( git merge -Xours ou git merge -Xtheirs )
border=0

ISENÇÃO DE RESPONSABILIDADE: -Xours , você pode escolher apenas uma opção: -Xours ou -Xtheirs , use uma estratégia diferente, você deve, claro, ir arquivo por arquivo.

Não sei se existe uma maneira de checkout a checkout , mas sinceramente não acho que seja muito útil: escolher uma estratégia usando o comando de compra é útil se você precisar de soluções diferentes para arquivos diferentes, senão apenas a abordagem da estratégia de mesclagem.

30
14 июля '14 в 22:26 2014-07-14 22:26 a resposta é dada ThanksForAllTheFish 14 de julho de '14 às 22:26 2014-07-14 22:26

git checkout --[ours/theirs] . fará o que quiser, desde que você esteja na raiz de todos os conflitos. o nosso / deles afeta apenas arquivos não vinculados, então você não precisa ter problemas com o grep / find / etc.

20
07 янв. Resposta dada por Cory Petosky Jan 07 2016-01-07 23:49 '16 às 23:49 2016-01-07 23:49
 git diff --name-only --diff-filter=U | xargs git checkout --theirs 

Parece que você precisa fazer este trabalho. Note que para conseguir isso, você deve ser cd'ed para o diretório raiz do repositório git.

1
12 сент. A resposta é dada por Pedro 12 de setembro 2017-09-12 15:56 '17 às 15:56 2017-09-12 15:56