Esta pergunta exige "números de linha". Se você não se importa com os números de linha na saída, consulte esta pergunta e resposta .
Basicamente, não quero ver o conteúdo alterado, apenas os nomes dos arquivos e os números de linha.
Esta pergunta exige "números de linha". Se você não se importa com os números de linha na saída, consulte esta pergunta e resposta .
Basicamente, não quero ver o conteúdo alterado, apenas os nomes dos arquivos e os números de linha.
Respostas:
Nota: se você está apenas procurando os nomes dos arquivos alterados ( sem os números das linhas que foram alteradas), é fácil, clique neste link para outra resposta aqui .
Não existe uma opção embutida para isso (e também não acho útil), mas é possível fazer isso no git, com a ajuda de um script "diff externo".
Aqui está um pouco ruim; caberá a você corrigir a saída da maneira que deseja.
#! /bin/sh
#
# run this with:
# GIT_EXTERNAL_DIFF=<name of script> git diff ...
#
case $# in
1) "unmerged file $@, can't show you line numbers"; exit 1;;
7) ;;
*) echo "I don't know what to do, help!"; exit 1;;
esac
path=$1
old_file=$2
old_hex=$3
old_mode=$4
new_file=$5
new_hex=$6
new_mode=$7
printf '%s: ' $path
diff $old_file $new_file | grep -v '^[<>-]'
Para detalhes sobre "diff externo", veja a descrição GIT_EXTERNAL_DIFF
na página de manual do git (em torno da linha 700, bem perto do fim).
| grep -o '^[0-9]*'
fornece apenas números, supondo que você não se importe com o lado direito.
--diff-filter=...
onde a ...
peça é o tipo de alteração que você deseja ver: M
para modificado, A
adicionado, D
excluído e outros, conforme a git diff
documentação.
Tão fácil:
git diff --name-only
Vá em frente e diff!
git diff --name-only master..HEAD
Números de linha como no número de linhas alteradas ou nos números de linha reais que contêm as alterações? Se você deseja o número de linhas alteradas, use git diff --stat
. Isso fornece uma exibição como esta:
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
Não há opção para obter os números das linhas das alterações.
git diff master --compact-summary
A saída é:
src/app/components/common/sidebar/toolbar/toolbar.component.html | 2 +-
src/app/components/common/sidebar/toolbar/toolbar.component.scss | 2 --
É exatamente isso que você precisa. Mesmo formato que quando você faz commit ou obtém novos commit do controle remoto.
PS: Isso significa que ninguém respondeu dessa maneira.
1) O meu favorito:
git diff --name-status
Anexa o status do arquivo, por exemplo:
A new_file.txt
M modified_file.txt
D deleted_file.txt
2) Se você deseja estatísticas, então:
git diff --stat
mostrará algo como:
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
3) Finalmente, se você realmente deseja apenas os nomes de arquivos:
git diff --name-only
Mostrará simplesmente:
new_file.txt
modified_file.txt
deleted_file
Mostra os nomes dos arquivos e a quantidade / número de linhas que foram alteradas em cada arquivo entre agora e a confirmação especificada:
git diff --stat <commit-hash>
Eu sei que essa é uma pergunta antiga, mas no Windows, isso filtra a saída do git para os arquivos e altera os números de linha:
(git diff -p --stat) | findstr "@@ --git"
diff --git a/dir1/dir2/file.cpp b/dir1/dir2/file.cpp
@@ -47,6 +47,7 @@ <some function name>
@@ -97,7 +98,7 @@ <another functon name>
Para extrair os arquivos e as linhas alteradas, é um pouco mais trabalhoso:
for /f "tokens=3,4* delims=-+ " %f in ('^(git diff -p --stat .^) ^| findstr ^"@@ --git^"') do @echo %f
a/dir1/dir2/file.cpp
47,7
98,7
Ativado git version 2.17.1
, não há um sinalizador interno para atingir esse objetivo.
Aqui está um comando de exemplo para filtrar o nome do arquivo e os números de linha de um diff unificado:
git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
Por exemplo, o diff unificado:
$ git diff --unified=0
diff --cc foobar
index b436f31,df63c58..0000000
--- a/foobar
+++ b/foobar
@@@ -1,2 -1,2 +1,6 @@@ Line abov
++<<<<<<< HEAD
+bar
++=======
+ foo
++>>>>>>> Commit message
Vai resultar em:
❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1
Para corresponder à saída de comandos em resultados comuns de correspondência grep:
$ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )| @@@.*' | sed -e '0~3{s/ @@@[ ]\?//}' | sed '2~3 s/$/\n1/g' | sed "N;N;N;s/\n/:/g"
foobar:1:1:Line abov
grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )
: Corresponde ao nome do arquivo de diff --cc <filename>
OU Corresponde ao número da linha de @@@ <from-file-range> <from-file-range> <to-file-range>
OU Corresponde ao texto restante depois @@@
.sed -e '0~3{s/ @@@[ ]\?//}'
: Remova @@@[ ]\?
de cada terceira linha para obter o contexto opcional de 1 linha antes ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: Adicione a \n1
cada 3 linhas entre a 2ª e a 3ª linha para o número da coluna.sed "N;N;N;s/\n/:/g"
: Junte a cada 3 linhas com a :
.Eu uso grep
como uma solução ingênua.
$ git diff | grep -A2 -- '---'
um exemplo de saída:
--- a/fileA.txt
+++ b/fileA.txt
@@ -0,0 +1,132 @@
--
--- a/B/fileC.txt
+++ b/B/fileC.txt
@@ -33663,3 +33663,68800 @@ word_38077.png,Latin
--
--- a/D/fileE.txt
+++ b/D/fileE.txt
@@ -17998,3 +17998,84465 @@ word_23979.png,Latin
--
--- a/F
+++ b/F
@@ -1 +1 @@
Talvez você possa ver uma saída colorida. Ajuda você a ler facilmente as saídas.