Você está procurando alterações em um arquivo em uma única ramificação; em todas as filiais locais; em todas as filiais em um único controle remoto; ou através de tudo isso? Eu acho que em tudo isso exigirá um script.
benhorgen
Respostas:
1083
Os --followtrabalhos para um arquivo específico
git log --follow -- filename
Diferença para outras soluções dadas
Observe que outras soluções incluem git log path(sem o --follow). Essa abordagem é útil se você deseja acompanhar, por exemplo, alterações em um diretório , mas tropeça quando os arquivos são renomeados (portanto, use --follow filename).
+1 --followcontas para renomeações, então isso é mais robusto do quegit log -- path
Gabe Moothart
42
Observe que --followaceita um caminho , que pode ser um arquivo, mas também um diretório. No caso deste último, ele será executado recursivamente e relatará alterações em todos os arquivos abaixo desse ponto. (Este comportamento não está documentado na página de manual e não pode ser permanente.)
StvnW
5
Qual a diferença entre aquele e apenasgit log filename?
Vato
8
@SaulOrtega, git log filenamenão segue a renomeação de arquivos, ou seja, mostrará todos os commits relativos a esse nome de arquivo (não ao arquivo real). Se você criar arquivos Xe Y, alterou os dois, excluiu Ye renomeou Xpara Ye também os alterou, e executar git log Y, você receberá mensagens para o antigoY e o novo . E o contrário, --followvocê receberá confirmações sobre esse arquivo quando ele foi nomeado Xe quando ele foi nomeado Y.
MarSoft
7
usar "git log --all filename" para ver todos os commits em todos os ramos
Lebnik
122
git log pathdeve fazer o que quiser. Do git loghomem :
[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion with
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.
Não funciona se o caminho do arquivo foi alterado. A resposta de jackrabbit funciona nesse caso.
Kwahn #
1
Isso funciona se você precisar restringir o log para um ramo específico
AMS
63
Eu estive olhando isso de perto e todas essas respostas não parecem realmente me mostrar todos os commits em todos os ramos.
Aqui está o que eu descobri brincando com as opções de exibição de edição do gitk. Isso mostra todas as confirmações para um arquivo, independentemente da ramificação, local, reflog e remoto.
Isso é perfeito para quando alguém faz alterações, mas elas esquecem onde confirmaram as alterações.
earthmeLon
2
Muito útil. Inclui também stash commits
Juan Antonio Tubío
Essa deve ser a resposta preferida. A questão era encontrar todos os commits, este aqui.
carl verbiest
Observe que --refloginclui confirmações que foram reformuladas / alteradas ou descartadas. Talvez isso deva ser óbvio, mas tentei usar isso git loge estava tentando descobrir por que estava vendo confirmações aparentemente duplicadas!
Soren Bjornstad 9/07/19
43
Use o comando abaixo para obter confirmações para um arquivo específico:
Entendo que isso não responde exatamente à pergunta, pois ele queria uma lista de confirmações, mas isso é ouro e está no meu arquivo.
zkent
3
Isso não funcionará se o arquivo não existir na ramificação com check-out atualmente. Você pode adicionar o ramo como git log -p mybranch -- filenameou apenas usar git log --all -- filenamepara procurar em todos os ramos.
Soren Bjornstad 9/07/19
37
Deve ser tão simples quanto git log <somepath>; verifique a página de manual ( git-log(1)).
Pessoalmente, gosto de usar git log --stat <path>para poder ver o impacto de cada confirmação no arquivo.
Ou mesmo -pse você quiser ver o diff completo, não apenas que ele teve algum número de linhas modificadas.
Cascabel
É verdade, mas isso é bastante barulhento, considerando que a maioria dos arquivos foi alterada várias vezes ao longo de suas vidas. Não quero ver diferenças completas de todos os commit que já tocaram em um arquivo. Normalmente, procuro algo específico, para que eu possa obter um registro com apenas impactos e, git showem seguida, nos commits específicos que parecem ser importantes.
Rfunduk 13/09/10
git log --stat --follow - * .html => lista de saída de confirmações com exatamente um arquivo em cada confirmação. Muito agradável!
Sergio Belevskij 7/02/19
18
Como alternativa (desde o Git 1.8.4), também é possível obter todos os commits que alteraram uma parte específica de um arquivo. Você pode obter isso passando a linha inicial e o número da linha final.
O resultado retornado seria a lista de confirmações que modificaram esta parte específica. O comando é como:
Como jackrabb1t apontou, --followé mais robusto, pois continua listando o histórico além de renomear / mover. Portanto, se você estiver procurando por um arquivo que não esteja atualmente no mesmo caminho ou que tenha sido renomeado por várias confirmações, --follow o rastreará.
Essa pode ser uma opção melhor se você deseja visualizar as alterações de nome / caminho:
git log --follow --name-status -- <path>
Mas se você quiser uma lista mais compacta, apenas com o que importa:
--followfunciona para um único caminho , que pode ser um diretório. Se for aprovado em um diretório, ele será executado recursivamente e relatará alterações em todos os arquivos abaixo desse ponto.
StvnW
10
Se você está tentando - seguir um arquivo excluído em uma confirmação anterior, use
Para gitiniciantes: use git log -p --follow -- filenamepara exibir as alterações também. Observe também: "filename" pode ser um arquivo, um diretório ou um submódulo.
Tino
8
Se você deseja visualizar todas as confirmações que alteraram um arquivo, em todas as ramificações, use o seguinte:
Se você deseja ver todas as alterações feitas nas confirmações que alteraram um arquivo específico (em vez de apenas as alterações feitas no próprio arquivo), você pode passar --full-diff:
o que significa que 5 confirmações tocaram neste arquivo. É a ordem cronológica inversa, portanto, o primeiro commit na lista b7c4f0d7é o mais recente.
Pode ser instalado usando "sudo apt-get install git-gui gitk". Ele pode ser usado para ver confirmações de um arquivo específico por "gitk <Filename>".
Respostas:
Os
--follow
trabalhos para um arquivo específicoDiferença para outras soluções dadas
Observe que outras soluções incluem
git log path
(sem o--follow
). Essa abordagem é útil se você deseja acompanhar, por exemplo, alterações em um diretório , mas tropeça quando os arquivos são renomeados (portanto, use--follow filename
).fonte
--follow
contas para renomeações, então isso é mais robusto do quegit log -- path
--follow
aceita um caminho , que pode ser um arquivo, mas também um diretório. No caso deste último, ele será executado recursivamente e relatará alterações em todos os arquivos abaixo desse ponto. (Este comportamento não está documentado na página de manual e não pode ser permanente.)git log filename?
git log filename
não segue a renomeação de arquivos, ou seja, mostrará todos os commits relativos a esse nome de arquivo (não ao arquivo real). Se você criar arquivosX
eY
, alterou os dois, excluiuY
e renomeouX
paraY
e também os alterou, e executargit log Y
, você receberá mensagens para o antigoY
e o novo . E o contrário,--follow
você receberá confirmações sobre esse arquivo quando ele foi nomeadoX
e quando ele foi nomeadoY
.git log path
deve fazer o que quiser. Dogit log
homem :fonte
Eu estive olhando isso de perto e todas essas respostas não parecem realmente me mostrar todos os commits em todos os ramos.
Aqui está o que eu descobri brincando com as opções de exibição de edição do gitk. Isso mostra todas as confirmações para um arquivo, independentemente da ramificação, local, reflog e remoto.
Também trabalha com
git log
:fonte
--reflog
inclui confirmações que foram reformuladas / alteradas ou descartadas. Talvez isso deva ser óbvio, mas tentei usar issogit log
e estava tentando descobrir por que estava vendo confirmações aparentemente duplicadas!Use o comando abaixo para obter confirmações para um arquivo específico:
fonte
git log -p mybranch -- filename
ou apenas usargit log --all -- filename
para procurar em todos os ramos.Deve ser tão simples quanto
git log <somepath>
; verifique a página de manual (git-log(1)
).Pessoalmente, gosto de usar
git log --stat <path>
para poder ver o impacto de cada confirmação no arquivo.fonte
-p
se você quiser ver o diff completo, não apenas que ele teve algum número de linhas modificadas.git show
em seguida, nos commits específicos que parecem ser importantes.Como alternativa (desde o Git 1.8.4), também é possível obter todos os commits que alteraram uma parte específica de um arquivo. Você pode obter isso passando a linha inicial e o número da linha final.
O resultado retornado seria a lista de confirmações que modificaram esta parte específica. O comando é como:
onde
upperLimit
está ostart_line_number
elowerLimit
é oending_line_number
Mais informações - https://www.techpurohit.com/list-some-useful-git-commands
fonte
Como jackrabb1t apontou,
--follow
é mais robusto, pois continua listando o histórico além de renomear / mover. Portanto, se você estiver procurando por um arquivo que não esteja atualmente no mesmo caminho ou que tenha sido renomeado por várias confirmações, --follow o rastreará.Essa pode ser uma opção melhor se você deseja visualizar as alterações de nome / caminho:
Mas se você quiser uma lista mais compacta, apenas com o que importa:
ou mesmo
A desvantagem é que
--follow
só funciona para um único arquivo.fonte
--follow
funciona para um único caminho , que pode ser um diretório. Se for aprovado em um diretório, ele será executado recursivamente e relatará alterações em todos os arquivos abaixo desse ponto.Se você está tentando - seguir um arquivo excluído em uma confirmação anterior, use
fonte
git
iniciantes: usegit log -p --follow -- filename
para exibir as alterações também. Observe também: "filename" pode ser um arquivo, um diretório ou um submódulo.Se você deseja visualizar todas as confirmações que alteraram um arquivo, em todas as ramificações, use o seguinte:
fonte
Se você deseja procurar todos os commits por
filename
e não porfilepath
, use:fonte
Se você deseja ver todas as alterações feitas nas confirmações que alteraram um arquivo específico (em vez de apenas as alterações feitas no próprio arquivo), você pode passar
--full-diff
:fonte
[branch]
Use
git log --all <filename>
para visualizar os commits que influenciam<filename>
em todas as ramificações.fonte
Supondo que o pacote "gitk" já esteja instalado.
Se não estiver instalado, faça o seguinte:
E tente o comando acima. É para Linux ... Pode ajudar os usuários de Linux se eles querem uma GUI.
fonte
gitk
pacote inclui o Git for Windows.Para obter apenas uma lista dos hashes de confirmação, use
git rev-list
Resultado:
o que significa que 5 confirmações tocaram neste arquivo. É a ordem cronológica inversa, portanto, o primeiro commit na lista
b7c4f0d7
é o mais recente.fonte
No Linux, você pode usar o gitk para isso.
Pode ser instalado usando "sudo apt-get install git-gui gitk". Ele pode ser usado para ver confirmações de um arquivo específico por "gitk <Filename>".
fonte
Referência
fonte