Existe uma maneira de ver quais arquivos foram alterados em uma ramificação?
Existe uma maneira de ver quais arquivos foram alterados em uma ramificação?
Respostas:
Uma alternativa à resposta de @Marco Ponti e evitando o checkout:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
Se seu shell em particular não entender a construção $ (), use back-ticks.
git diff --name-only <some-other-branch>
mostrará quais arquivos são diferentes entre sua ramificação atual e <some-other-branch>
. Portanto, é essencialmente o mesmo comando, mas nota que você pode usar isso para encontrar os arquivos que são diferentes entre quaisquer dois ramos, mesmo se eles não estão remotamente relacionados. Se essa comparação é útil ou não, depende da topologia de suas ramificações ... Além disso, observe que <some-other-branch>
realmente pode haver algum commit, ou qualquer coisa que resolva um (tags, etc.).
<notMainDev>
e <MY_CURRENT_CO_BRANCH>
mais recentemente, teve um ancestral comum e será comparado <notMainDev>
a esse ancestral. Você precisará fornecer seu nome de filial atual, como git merge-base
espera dois argumentos - não há um atalho, pelo menos na versão atual.
git branch | grep '\*' | awk '{print $2}'
que obterá o commit da ramificação entre <notMainDev> e minha ramificação atual. Eu posso então fazer git diff --name-only <notMainDev> $ (git merge-base <notMainDev> git branch | grep '\*' | awk '{print $2}'
)
Tudo o que você precisa fazer é o seguinte:
git checkout <notMainDev>
git diff --name-only <mainDev>
Isso mostrará apenas os nomes de arquivos diferentes entre os dois ramos.
<mainDev>
desde que os ramos divergiram. Em git diff --name-only <sha-of-branch-point>
vez disso, você pode usar ou ver a resposta alternativa que eu postei que evita o checkout.
notMainDev
seria mantido atualizado com os commits mainDev ... Eu geralmente acho útil ver essas diferenças também.
<sha-of-branch-point>
comgit rev-parse <branch-name>
espantado, isso não foi dito até agora!
git diff master...branch
Portanto, veja as alterações apenas em branch
Para verificar a filial atual, use
git diff master...
Graças a jqr
Esta é uma mão curta para
git diff $(git merge-base master branch) branch
portanto, a base de mesclagem (a confirmação comum mais recente entre as ramificações) e a dica da ramificação
Também usar origem / mestre em vez de apenas mestre ajudará caso seu mestre local seja datado
git diff --name-only master..
se você quiser apenas os nomes dos arquivos diferentes entre os dois ramos.
Não acredito que existem muitas maneiras de fazer isso. Eu uso o que mudou como alguém postado antes, apenas com os seguintes argumentos:
git whatchanged --name-only --pretty="" origin..HEAD
Isso apenas lista os nomes de arquivos e apenas os que foram alterados na ramificação atual.
New users are encouraged to use git-log instead. The whatchanged command is essentially the same as git-log but defaults to show the raw format diff output and to skip merges.
Eu realmente gostei da resposta de @ twalberg, mas não queria digitar o nome do ramo atual o tempo todo. Então, eu estou usando isso:
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-only
quando executado no ramo de destino e obtive o mesmo resultado. Você poderia ter a gentileza de fornecer algum feedback sobre o que é bom ou ruim entre sua resposta e o comando que forneci?
git diff master.. --name-only
(note que existem apenas 2 pontos em vez de 3). Para entender o que os pontos significam, consulte esta resposta
git whatchanged
parece ser uma boa alternativa.
New users are encouraged to use git-log instead. The whatchanged command is essentially the same as git-log but defaults to show the raw format diff output and to skip merges.
git diff --name-only master...branch-name
com o qual queremos comparar.
E se pudesse ser tão fácil assim?
git changed
Se você deseja assumir que o ramo principal é chamado de "mestre" e que você cria seus outros ramos a partir do mestre, você pode adicionar esse alias ao seu ~/.gitconfig
arquivo para facilitar:
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
Essas suposições funcionarão para a maioria das pessoas na maioria das situações, mas você deve estar ciente de que as está fazendo.
Além disso, você deve usar um shell que suporte $()
. É muito provável que seu shell suporte isso .
git show --stat origin/branch_name
Isso fornecerá uma lista dos arquivos que foram adicionados ou modificados nesta ramificação.
Por alguma razão, ninguém mencionou git-tree
. Consulte https://stackoverflow.com/a/424142/1657819
git-tree
é preferido porque é um comando de encanamento ; deve ser programático (e, presumivelmente, mais rápido)
(assumindo que o ramo base seja master
)
git diff-tree --no-commit-id --name-only -r master..branch-name
No entanto, isso mostrará todos os arquivos que foram afetados na ramificação. Se você quiser ver apenas arquivos modificados explicitamente , poderá usar --diff-filter
:
git diff-tree --no-commit-id --name-only -r master..branch-name --diff-filter=M
Também é possível usar, em --name-status
vez de, --name-only
para ver o status dos arquivos ( A
/ M
/ D
e assim por diante)
rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
A resposta aceita - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
- é muito próxima, mas notei que o status estava errado para exclusões. Adicionei um arquivo em uma ramificação e, no entanto, este comando (usando --name-status
) deu ao arquivo que excluí o status "A" e ao arquivo que adicionei o status "D".
Eu tive que usar este comando:
git diff --name-only $(git merge-base <notMainDev> <mainDev>)
O seguinte arquivo em lotes é baseado na resposta do twalberg, mas funcionará no Windows:
@ECHO OFF
C: :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% origin/drop2/master)"
PAUSE
O item acima pressupõe que o ramo principal seja origem / mestre e que o git bash foi incluído quando o Git foi instalado (e sua localização é no ambiente do caminho). Na verdade, eu precisava mostrar as diferenças reais usando uma ferramenta diff configurada (kdiff3) para substituir o seguinte comando bash acima:
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"