Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.49.0
2025-03-14
- 2.48.1 no changes
-
2.48.0
2025-01-10
- 2.46.1 → 2.47.2 no changes
-
2.46.0
2024-07-29
-
2.45.3
2024-11-26
- 2.45.1 → 2.45.2 no changes
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.3 no changes
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.6 no changes
-
2.43.0
2023-11-20
- 2.42.2 → 2.42.4 no changes
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 no changes
-
2.41.0
2023-06-01
- 2.40.1 → 2.40.4 no changes
-
2.40.0
2023-03-12
- 2.36.1 → 2.39.5 no changes
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 no changes
-
2.35.0
2022-01-24
- 2.33.3 → 2.34.8 no changes
-
2.33.2
2022-03-23
-
2.33.1
2021-10-12
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 no changes
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 no changes
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 no changes
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 no changes
-
2.29.0
2020-10-19
- 2.28.1 no changes
-
2.28.0
2020-07-27
- 2.27.1 no changes
-
2.27.0
2020-06-01
- 2.26.1 → 2.26.3 no changes
-
2.26.0
2020-03-22
- 2.25.2 → 2.25.5 no changes
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 no changes
-
2.24.0
2019-11-04
- 2.22.1 → 2.23.4 no changes
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 no changes
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 no changes
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 no changes
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 no changes
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 no changes
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
- 2.3.10 no changes
-
2.2.3
2015-09-04
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
DESCRIÇÃO
Exibe um ou mais objetos (bolhas, árvores, tags e commits).
Para commits, exibe a mensagem do registro log e a diferença textual. Ele também apresenta o commit de mesclagem em um formato especial, produzido por git diff-tree --cc.
Para tags, ele exibe a mensagem da tag e os objetos referenciados.
Para árvores, ele exibe os nomes (equivalente a git ls-tree
com --name-only).
Para bolhas simples, exibe o conteúdo simples.
Algumas opções que o comando git log entende podem ser utilizadas para controlar como as alterações introduzidas pelo commit são mostradas.
Esta página do manual descreve apenas as opções utilizadas com mais frequência.
OPÇÕES
- <objeto>…
-
Os nomes dos objetos que será mostrados (o padrão é
HEAD
). Para obter uma lista mais completa de maneiras de soletrar nomes de objetos, consulte a seção "ESPECIFICANDO AS REVISÕES" do comando gitrevisions[7]. - --pretty[=<formato>]
- --format=<formato>
-
Imprima o conteúdo dos registros do commit num determinado formato, onde <format> pode ser oneline, short, medium, full, fuller, reference, email, raw, format:<string> e tformat:<string>. Quando <format> não for nenhuma das opções acima e tem %placeholder, ele age como se a opção --pretty=tformat:<formato> tivesse sido usado.
Consulte a seção "FORMATOS BONITOS" para obter alguns detalhes adicionais sobre cada formato. Quando a parte =<formato> é omitida, a predefinição é medium.
Nota: você pode especificar o formato "pretty" padrão na configuração do repositório (consulte git-config[1]).
- --abbrev-commit
-
Em vez de mostrar o nome hexadecimal com 40 bytes completo do objeto commit, mostre um prefixo que nomeie o objeto de maneira exclusiva. A opção --abbrev=<n> (que também modifica a saída do diff, se for exibida) pode ser usada para especificar o comprimento mínimo do prefixo.
Isso deve tornar
--pretty=oneline
muito mais legível para pessoas que usam terminais com 80 colunas. - --no-abbrev-commit
-
Exibe o nome do objeto commit completo com 40 bytes hexadecimais. Isso nega o a opção
--abbrev-commit
, de forma explícita ou implícita pelas outras opções como "--oneline". Ele também substitui a variávellog.abbrevCommit
. - --oneline
-
Este é um atalho para "--pretty=oneline --abbrev-commit" ser utilizado junto.
- --encoding=<codificação>
-
Os objetos commit registram a codificação dos caracteres usado para a mensagem de registro log em seu cabeçalho de codificação; esta opção pode ser usada para informar ao comando para recodificar a mensagem de registro log do commit na codificação preferida pelo usuário. Para comandos que não sejam para redirecionamento, o padrão é UTF-8. Observe que, se um objeto alegar ser codificado em
X
e estivermos produzindo emX
, produziremos o objeto literalmente; isso significa que as sequências inválidas no commit original podem ser copiadas para o objeto criado. Da mesma maneira, se o iconv(3) não conseguir converter o commit, faremos o envio literal do objeto original. - --expand-tabs=<n>
- --expand-tabs
- --no-expand-tabs
-
Execute uma expansão de tabulação (substitua cada tabulação por espaços suficientes para preencher a próxima coluna de exibição que seja um múltiplo de <n>) na mensagem de registro antes de mostrá-la na saída. A opção
--expand-tabs
é uma abreviação de--expand-tabs=8
e--no-expand-tabs
é uma abreviação de--expand-tabs=0
, que desativa a expansão das guias.È predefinido que as guias sejam expandidas em formatos bonitos que recuam a mensagem de registro em 4 espaços (ou seja, a predefinição medium, full e fuller).
- --notes[=<ref>]
-
Mostre as notas (consulte git-notes[1]) que anotam o commit, ao mostrar a mensagem de registro do commit. Esta é a predefinição para os comandos
git log
,git show
egit whatchanged
quando não há nenhuma opção--pretty
,--format
ou--oneline
usada na linha de comando.É predefinido que as anotações exibidas são das anotações refs listadas nas variáveis
core.notesRef
enotes.displayRef
(ou substituições correspondentes do ambiente). Para mais detalhes consulte git-config[1].Com um argumento opcional <ref>, use a referência para localizar as notas a serem exibidas. Uma ref pode especificar o nome completo da ref quando começa com
refs/notes/
; quando começa comnotes/
,refs/
e, caso contrário,refs/notes/
é prefixado para formar o nome completo da ref.Várias opções
--notes
podem ser combinadas para controlar quais as notas estão sendo exibidas. Exemplos:--notes=foo
mostrará apenas as notas vindas de "refs/notes/foo";--notes=foo --notes
mostrará as notas vindas de "refs/notes/foo" e das notas ref(s) predefinidas. - --no-notes
-
Não mostrar as anotações. Isso anula a opção
--notes
acima, redefinindo a lista de refs das anotações a partir de onde as notas são exibidas. As opções são analisadas na ordem usada na linha de comando, portanto, por exemplo,--notes --notes=foo --no-notes --notes=bar
mostrará apenas as notas derefs/notes/bar
. - --show-notes-by-default
-
Mostra as notas predefinidas, a menos que sejam fornecidas opções para a exibição de notas específicas.
- --show-notes[=<ref>]
- --[no-]standard-notes
-
Essas opções estão obsoletas. Em vez disso, utilize as opções --notes/--no-notes acima.
- --show-signature
-
Verifique a validade de um objeto commit assinado, passando a assinatura para
gpg --verify
e exibe a sua saída.
FORMATOS BONITOS
Se o commit for uma mesclagem e se o formato "pretty" não for oneline, email ou raw, uma linha adicional será inserida antes da linha Author:. Essa linha começa com "Merge: " e os hashes dos commits ancestrais são impressos e separados por espaços. Observe que os commits listados podem não ser necessariamente a lista dos commits principais diretos se você tiver limitado a sua visão do histórico: se estiver interessado apenas nas alterações relacionadas a um determinado diretório ou arquivo por exemplo.
Existem vários formatos incorporados e você pode definir formatos adicionais ao definir uma opção da configuração pretty.<nome>
para um outro nome de formato ou uma string format:, conforme descrito abaixo (consulte git-config[1]). Aqui estão os detalhes dos formatos incorporados: Aqui estão os detalhes dos formatos incorporados:
-
oneline
<hash> <linha-do-título>
Isso foi desenvolvido para ser o mais compacto possível.
-
short
commit <hash> Author: <autor>
<linha-do-título>
-
medium
commit <hash> Author: <autor> Date: <data-do-autor>
<linha-do-título>
<mensagem-completa-do-commit>
-
full
commit <hash> Author: <autor> Commit: <quem fez o commit>
<linha-do-título>
<mensagem-completa-do-commit>
-
fuller
commit <hash> Author: <autor> AuthorDate: <data-do-autor> Commit: <quem-fez-o-commit> CommitDate: <a-data-de-quem-fez-o-commit>
<linha-do-título>
<mensagem-completa-do-commit>
-
reference
<abbrev-hash> (<linha-do-título>, <data-do-autor-abreviada>)
Este formato é usado para fazer referência a outro commit numa mensagem de commit e é o mesmo que
--pretty='format:%C(auto)%h (%s, %ad)'
. É predefinido que a data seja formatada com a opção--date=short
, a menos que uma outra opção--date
seja explicitamente especificada. Assim como qualquerformat:
com marcadores de formato, o que é gerado por ele não é afetado por outras opções como--decorate
e--walk-reflogs
. -
email
From <hash> <data> From: <autor> Date: <data-do-autor> Subject: [PATCH] <linha-do-título>
<mensagem-completa-do-commit>
-
mboxrd
Como e-mail, porém as linhas no commit da mensagem iniciando com "From" (precedidas por zero ou mais ">") são citadas com ">" para que não sejam confundidas ao iniciar um novo commit.
-
raw
O formato raw mostra o commit inteiro exatamente como armazenado no objeto de commit. Notavelmente, os hashes são exibidos na íntegra, independentemente do uso da opção --abbrev ou --no-abbrev, e as informações de parents mostram os verdadeiros commits principais, sem levar em conta os enxertos ou a simplificação do histórico. Observe que este formato afeta a forma como os commits são exibidos, mas não a forma como o diff é exibido, por exemplo, com o comando
git log --raw
. Para obter os nomes completos dos objetos num formato diff bruto, use--no-abbrev
. -
format:<formato-do-texto>
O formato format:<formato-do-texto> permite especificar quais as informações que você deseja exibir. Funciona um pouco como o formato "printf" com a exceção notável de que você obtém uma nova linha com %n em vez de \n.
Por exemplo,format:"O autor do %h foi %an, %ar%nO título era >>%s<<%n" exibirá algo como isso:
O autor do fe6e0ee foi Junio C Hamano, 23 houras atrás O título era >>t4119: test autocomputing -p<n> for traditional diff input.<<
Os espaços reservados são:
-
O Espaços reservados que se expandem para um único caractere literal:
-
Espaços reservados que afetam a formatação de espaços reservados posteriores:
- %Cred
-
mudar de cor para o vermelho
- %Cgreen
-
mudar de cor para o verde
- %Cblue
-
mudar de cor para o azul
- %Creset
-
redefine a cor
- %C(…)
-
Conforme foi descrito em Valores na seção "ARQUIVO DE CONFIGURAÇÃO" do comando git-config[1]. É predefinido que as cores são mostradas somente quando ativadas para a saída de registro (por
color.diff
,color.ui
ou--color
, respeitando as configuraçõesauto
do primeiro se estivermos indo para um terminal). O%C(auto,...)
é aceito como sinônimo histórico do padrão (por exemplo,%C(auto,red)
). Ao especificar%C(always,...)
exibirá as cores mesmo quando a cor não estiver ativada (considere utilizar apenas a opção--color=always
para ativar a cor para toda a saída, incluindo este formato e qualquer outra coisa que o git possa colorir). A opçãoauto
sozinha (ou seja,%C(auto)
) ativará a coloração automática nos próximos marcadores até que a cor seja trocada novamente. - %m
-
marca esquerda (
<
), direita (>
) ou limite (-
) - %w([<w>[,<i1>[,<i2>]]])
-
alterna a quebra da linha, como na opção
-w
do git-shortlog[1]. - %<( <N> [,trunc|ltrunc|mtrunc])
-
Faz com que o próximo marcador ocupe pelo menos N larguras de coluna, preenchendo espaços à direita, se necessário. Opcionalmente, trunque (com reticências …) à esquerda (ltrunc)
..ft
, no meio (mtrunc)mi..le
ou no final (trunc)rig..
, se a saída for maior que N colunas. Observação 1: esse truncamento só funciona corretamente com N >= 2. Observação 2: os espaços ao redor dos valores N e M (veja abaixo) são opcionais. Observação 3: Os emojis e outros caracteres longos ocuparão duas colunas de exibição, o que pode ultrapassar os limites da coluna. Observação 4: as marcas de combinação de caracteres decompostos podem estar mal posicionadas nos limites do preenchimento. - %<|( <M> )
-
Faz com que o próximo marcador ocupe pelo menos até a Mésima coluna de exibição, preenchendo espaços à direita, caso seja necessário. Use valores M negativos para posições de coluna medidas a partir da borda direita da janela do terminal.
- %>( <N> ), %>|( <M> )
-
semelhante a %<( <N> ), %<|( <M> ) respectivamente, mas preenchendo os espaços à esquerda
- %>>( <N> ), %>>|( <M> )
-
semelhante a %>( <N> ), %>|( <M> ) respectivamente, exceto caso o próximo espaço reservado ocupe mais espaços do que o informado e haja espaços à esquerda, utilize estes espaços
- %><( <N> ), %><|( <M> )
-
semelhante a %<( <N> ), %<|(< M >) respectivamente, mas preenchendo ambos os lados (quando o texto for centralizado por exemplo)
-
Espaços reservados que se expandem para as informações extraídas do commit:
- %H
-
hash do commit
- %h
-
abreviação do hash do commit
- %T
-
hash da árvore
- %t
-
hash abreviado da árvore
- %P
-
hash das origens
- %p
-
hash abreviado das origens
- %an
-
nome do autor
- %aN
-
o nome do autor (respeitando .mailmap, consulte git-shortlog[1] ou git-blame[1])
- %ae
-
e-mail do autor
- %aE
-
o e-mail do autor (respeitando .mailmap, consulte git-shortlog[1] ou git-blame[1])
- %al
-
parte local do e-mail do autor (a parte antes do sinal @)
- %aL
-
parte do autor local (rconsulte %al) espeitando o .mailmap, consulte git-shortlog[1] ou git-blame[1])
- %ad
-
data do autor (o formato respeita a opção --date=)
- %aD
-
data do autor, no padrão RFC2822
- %ar
-
data do autor, relativa
- %at
-
data do autor, com registro de data e hora em formato UNIX
- %ai
-
data do autor, formato parecido com ISO 8601
- %aI
-
data do autor, formato rigoroso ao padrão ISO 8601
- %as
-
data do autor, formato curto (
AAAA-MM-DD
) - %ah
-
data da autoria, compreensível para pessoas (como a opção
--date=human
do git-rev-list[1]) - %cn
-
nome de quem fez o commit
- %cN
-
o nome de quem fez o commit (respeitando .mailmap, consulte git-shortlog[1] ou git-blame[1])
- %ce
-
endereço do e-mail de quem fez o commit
- %cE
-
o e-mail de quem fez o commit (respeitando .mailmap, consulte git-shortlog[1] ou git-blame[1])
- %cl
-
parte local do e-mail de quem fez o commit (a parte antes do sinal @)
- %cL
-
a parte local de quem fez o commit (consulte %cl) respeitando o .mailmap, consulte see git-shortlog[1] ou git-blame[1])
- %cd
-
data do commit (o formato respeita a opção --date=)
- %cD
-
data do commit, no padrão RFC2822
- %cr
-
data do commit, relativa
- %ct
-
data do commit, com registro de data e hora em formato UNIX
- %ci
-
data do commit, formato parecido com ISO 8601
- %cI
-
data do commit, formato rigoroso ao padrão ISO 8601
- %cs
-
data do commit, formato curto (
AAAA-MM-DD
) - %ch
-
a data de quem fez o commit, compreensível para pessoas (como a opção
--date=human
do git-rev-list[1]) - %d
-
nomes de referência "ref", como a opção --decorate do git-log[1]
- %D
-
nomes de referência "ref" sem quebra automática " (", ")".
- %(decorate[:<opções>])
-
nomes de ref com decorações personalizadas. A string
decorate
pode ser seguida por dois pontos e zero ou mais opções separadas por vírgulas. Os valores das opções podem conter códigos de formatação literais. Eles devem ser usados para vírgulas (%x2C
) e parênteses de fechamento (%x29
), devido à sua função na sintaxe da opção.-
O prefix=<valor>: Exibido antes da lista de nomes ref. A predefinição é "
(
". -
O prefix=<valor>: Exibido antes da lista de nomes ref. A predefinição é "
)
". -
O separator=<valor>: Mostrado entre os nomes refs. A predefinição é "
,
". -
pointer=<valor>: Mostrado entre HEAD e o ramo para o qual aponta, se houver. A predefinição é "
->
". -
tag=<valor>: Mostrado antes dos nomes das tags. A predefinição é "
tag:
".
-
Por exemplo, para produzir decorações sem anotações nas tags, de envelopamento ou de espaços como separadores:
+
%(decorate:prefix=,suffix=,tag=,separator= )
- %(describe[:<opções>])
-
Um nome legível para humanos, como git-describe[1]; string vazia para commits sem descrição. A string
describe
pode ser seguida por dois-pontos, zero ou mais opções separadas por vírgulas. As descrições podem ser inconsistentes quando as etiquetas são adicionadas ou são removidas ao mesmo tempo.-
tags[=<bool-value>]: Em vez de considerar apenas as tags anotadas, considere também as lightweight tags.
-
abbrev=<número>: Em vez de usar o número padrão com dígitos hexadecimais (que variam de acordo com a quantidade dos objetos no repositório com um padrão de 7) do nome abreviado do objeto, utilize
<número>
dígitos ou quantos dígitos forem necessários para formar um nome do objeto que seja único. -
match=<pattern>: Considere apenas as etiquetas que coincidam com o padrão
glob(7)
informado, excluindo o prefixo "refs/tags/". -
exclude=<pattern>: Desconsidere as etiquetas que coincidam com o padrão
glob(7)
informado, excluindo o prefixo "refs/tags/".
-
- %S
-
os nomes "ref" dado na linha de comando pela qual o commit foi alcançado (como
git log --source
), só funciona com o comandogit log
- %e
-
codificação
- %s
-
assunto
- %f
-
linha do assunto higienizado, adequado para um nome de arquivo
- %b
-
corpo
- %B
-
corpo bruto (assunto e corpo da mensagem desembrulhados)
- %N
-
anotações de quem fez o commit
- %GG
-
verificação bruta da mensagem vinda do GPG para um commit assinado
- %G?
-
Mostre "G" para uma assinatura boa (válida), "B" para uma assinatura ruim, "U" para uma assinatura boa com validade desconhecida, "X" para uma assinatura boa que expirou, "Y" para uma assinatura boa feita por uma chave expirada, "R" para uma assinatura boa feita por uma chave revogada, "E" se a assinatura não puder ser verificada (falta de chave por exemplo) e "N" para nenhuma assinatura
- %GS
-
exibe o nome do assinante de um commit assinado
- %GK
-
exibe a chave utilizada para assinar um commit assinado
- %GF
-
exiba a impressão digital da chave utilizada para assinar um commit já assinado
- %GP
-
exiba a impressão digital da chave primária cuja subchave foi utilizada para assinar um commit assinado
- %GT
-
exiba o nível de confiança da chave utilizada para assinar um commit assinado
- %gD
-
seletor do reflog, como por exemplo,
refs/stash@{1}
orrefs/stash@{2 minutos atrás}
; o formato segue as regras descritas para a opção-g
. A parte antes ao@
é o "refname", conforme indicado na linha de comando (portanto,git log -g refs/heads/master
produziriarefs/heads/master@{0}
). - %gd
-
o encurtamento do seletor do reflog; o mesmo que
%gD
, porém a parte do refname é reduzida visando a legibilidade humana (assim, orefs/heads/master
se torna apenasmaster
). - %gn
-
nome da identidade "reflog"
- %gN
-
nome da identidade do reflog (respeitando .mailmap, consulte git-shortlog[1] ou git-blame[1])
- %ge
-
e-mail da identidade reflog
- %gE
-
e-mail da identidade do reflog (respeitando .mailmap, consulte git-shortlog[1] ou git-blame[1])
- %gs
-
assunto reflog
- %(trailers[:<opções>])
-
exibe os trechos do corpo como interpretado através do git-interpret-trailers[1]. Os trechos do texto da resposta podem ser seguidas por dois pontos, zero ou mais opções separadas por vírgula: Caso qualquer opção seja usada várias vezes, a última ocorrência ganha.
-
A key=<chave>: mostra apenas os caracteres de resposta com a <chave> especificada. A correspondência é feita sem distinção entre maiúsculas e minúsculas, os dois-pontos finais são opcionais. Se a opção for usada várias vezes, serão mostradas as linhas dos caracteres de resposta que correspondem a qualquer uma das chaves. Esta opção ativa automaticamente a opção
only
para que as linhas que não tenham caracteres de resposta no bloco oculto com caracteres de resposta. Se isso não for desejado, desative comonly=false
. Por exemplo,%(trailers:key=Revisado-por)
mostra as linhas do trailer com a chaveRevisado-por
. -
only[=<bool>]: selecione se as linhas não relacionadas à resposta a partir do bloco de resposta, devem ser incluídas ou não.
-
separator=<sep>: specify the separator inserted between trailer lines. Defaults to a line feed character. The string <sep> may contain the literal formatting codes described above. To use comma as separator one must use
%x2C
as it would otherwise be parsed as next option. E.g.,%(trailers:key=Ticket,separator=%x2C )
shows all trailer lines whose key is "Ticket" separated by a comma and a space. -
unfold[=<bool>]: faça com que se comporte como se a opção
--unfold
do caracteres de resposta tenha sido passado. Por exemplo,%(trailers:only,unfold=true)
desdobra e mostra todas as linhas de resposta. -
keyonly[=<bool>]: mostra apenas a parte principal da resposta.
-
valueonly[=<bool>]: mostra apenas o valor da parte da resposta.
-
key_value_separator=<sep>: specify the separator inserted between the key and value of each trailer. Defaults to ": ". Otherwise it shares the same semantics as separator=<sep> above.
-
-
Note
|
Alguns espaços reservados podem depender das outras opções passadas para o motor percorrer a revisão. Por exemplo o opção %g* do reflog insere um espaço vazio a menos que estejamos percorrendo as entradas do reflog (exemplo, através do comando git log -g ). Os espaços reservados %d e %D usarão o formato de decoração "curta" caso a opção --decorate já não esteja sendo utilizada na linha de comando.
|
The boolean options accept an optional value [=<bool-value>]
. The values taken by --type=bool
git-config[1], like yes
and off
, are all accepted. Giving a boolean option without =<value>
is equivalent to giving it with =true
.
Caso adicionemos um +
(sinal de adição) após o % de um espaço reservado, um feed de linha será inserido imediatamente antes da expansão, se e somente se o espaço reservado se expandir para uma sequência de caracteres não vazio.
Caso adicione um -
(sinal de menos) após o % de um espaço reservado, imediatamente todos os feeds consecutivos das linhas anteriores à expansão serão excluídos caso e somente caso o espaço reservado se expanda para um texto vazio.
Caso adicionemos um ` ` (espaço) após o % de um espaço reservado, um espaço será inserido imediatamente antes da expansão, se e somente se o espaço reservado se expandir para uma sequência de caracteres não vazios.
-
tformat:
O formato tformat: funciona exatamente como o format:, exceto pelo fato de que ele fornece a semântica de "terminador" em vez da semântica de "separador". Em outras palavras, cada commit tem o caractere de terminação da mensagem (geralmente uma nova linha) anexado, em vez de um separador colocado entre as entradas. Isso significa que a entrada final de um formato único da linha será encerrada corretamente com uma nova linha, exatamente como o formato "oneline" faz. Por exemplo:
$ git log -2 --pretty=format:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973 -- NO NEWLINE $ git log -2 --pretty=tformat:%h 4da45bef \ | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/' 4da45be 7134973
Além disso, qualquer string não reconhecida que tenha um
%
é interpretada como se tivessetformat:
na frente. Por exemplo, estes dois são equivalentes:$ git log -2 --pretty=tformat:%h 4da45bef $ git log -2 --pretty=%h 4da45bef
FORMATAÇÃO DIFF
As opções abaixo podem ser usadas para alterar a maneira como o comando git show
gera o diff.
Warning
|
Missing See original version for this content. |
Gerando a correção em um formato texto com a opção -p
Executando git-diff[1], git-log[1], git-show[1], git-diff-index[1], git-diff-tree[1], ou git-diff-files[1] com a opção -p
produz um patch em formato texto. É possível personalizar a criação do patch em um formato texto através das variáveis de ambiente GIT_EXTERNAL_DIFF
, GIT_DIFF_OPTS
(consulte git[1]) e o atributo diff
(consulte gitattributes[5]).
What the -p
option produces is slightly different from the traditional diff format:
-
Ele é precedido por um cabeçalho "git diff" que se parece com:
diff --git a/arquivo1 b/arquivo2
Os nomes dos arquivos
a/
eb/
são os mesmos a menos que haja uma renomeação ou cópia. Especialmente para uma criação ou exclusão,/dev/null
não é utilizado no lugar dos nomes do arquivoa/
oub/
.Quando há um envolvimento no processo de renomear ou copiar,
arquivo1
earquivo2
exibem o nome do arquivo de origem da renomeação ou cópia e o nome do arquivo produzido pela renomeação ou copia respectivamente. -
É seguido por uma ou mais linhas estendidas do cabeçalho:
old mode <mode> new mode <mode> deleted file mode <mode> new file mode <mode> copy from <path> copy to <path> rename from <path> rename to <path> similarity index <number> dissimilarity index <number> index <hash>..<hash> <mode>
File modes <mode> are printed as 6-digit octal numbers including the file type and file permission bits.
Os nomes do caminho nos cabeçalhos estendidos não incluem os prefixos
a/
eb/
.O índice de similaridade é a porcentagem das linhas inalteradas e o índice de dissimilaridade é a porcentagem das linhas alteradas. É um número inteiro arredondado, seguido por um sinal de porcentagem. O valor do índice de similaridade de 100% é reservado para dois arquivos iguais, enquanto a dissimilaridade de 100% significa que nenhuma linha do arquivo antigo chegou ao novo.
The index line includes the blob object names before and after the change. The <mode> is included if the file mode does not change; otherwise, separate lines indicate the old and the new mode.
-
Os nomes dos caminhos com caracteres "incomuns" são citados como já explicado na variável de configuração
core.quotePath
(consulte git-config[1]). -
Todos os arquivos
arquivo1
na saída se referem aos arquivos antes do commit e todos os arquivosarquivo2
se referem aos arquivos após o commit. É incorreto aplicar cada alteração em cada arquivo sequencialmente. Por exemplo, este patch irá substituir a e b:diff --git a/a b/b renomeie a partir de a renomeie para b diff --git a/b b/a renomeie a partir do b renomeie para a
-
Os cabeçalhos "hunk" mencionam o nome da função à qual o "hunk" se aplica. Consulte "Definindo um cabeçalho personalizado do hunk" em gitattributes[5] para detalhes de como adaptar a isto e para linguagens específicas.
O formato diff combinado
Qualquer comando que gere um diff pode utilizar a opção -c
ou`--cc` para produzir um diff combinado ao mostrar uma mesclagem. Este é o formato predefinido ao mostrar as mesclagens com git-diff[1] ou git-show[1]. Observe também que é possível usar a opção --diff-merges
que é adequada para qualquer um destes comandos para impor a geração dos diffs num determinado formato.
Um formato "diff combinado" fica assim:
diff --combined describe.c index fabadb8,cc95eb0..4866510 --- a/describe.c +++ b/describe.c @@@ -98,20 -98,12 +98,20 @@@ return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1; } - static void describe(char *arg) -static void describe(struct commit *cmit, int last_one) ++static void describe(char *arg, int last_one) { + unsigned char sha1[20]; + struct commit *cmit; struct commit_list *list; static int initialized = 0; struct commit_name *n; + if (get_sha1(arg, sha1) < 0) + usage(describe_usage); + cmit = lookup_commit_reference(sha1); + if (!cmit) + usage(describe_usage); + if (!initialized) { initialized = 1; for_each_ref(get_name);
-
Ele é precedido por um cabeçalho "git diff" parecido com este (quando a opção
-c
é utilizada):diff --combined arquivo
ou assim (quando a opção
--cc
é utilizada):diff --cc arquivo
-
Ele é seguido por uma ou mais linhas estendidas do cabeçalho (este exemplo exibe uma mesclagem com duas origens):
index <hash>,<hash>..<hash> mode <mode>,<mode>
..
<mode> new file mode <mode> deleted file mode <mode>,<mode>The
mode <mode>,<mode>..<mode>
line appears only if at least one of the <mode> is different from the rest. Extended headers with information about detected content movement (renames and copying detection) are designed to work with the diff of two <tree-ish> and are not used by combined diff format. -
É seguido por duas linhas do cabeçalho do arquivo/para o arquivo:
--- a/arquivo +++ b/arquivo
Semelhante ao cabeçalho de duas linhas para o formato diff tradicional unificado, o
/dev/null
é utilizado para sinalizar os arquivos criados ou excluídos.No entanto, caso a opção
--combined-all-paths
seja utilizada, em vez de duas linhas do arquivo/para o arquivo, será obtido um cabeçalhoN+1
do cabeçalho do arquivo de "origem" para o arquivo de "destino" onde N é a quantidade de origens na mesclagem do commit:--- a/arquivo --- a/arquivo --- a/arquivo +++ b/arquivo
Este formato estendido pode ser útil caso a detecção da renomeação ou cópia esteja ativa, permitindo que você veja o nome original do arquivo em diferentes origens.
-
O formato do cabeçalho do pedaço é modificado para prevenir que as pessoas o alimentem acidentalmente com
patch -p1
. O formato diff combinado foi criado para revisar as alterações da mesclagem dos commits e não era para ser aplicado. A alteração é semelhante a alteração no cabeçalho estendido do índice:@@@ <from-file-range> <from-file-range> <to-file-range> @@@
Existem (a quantidade de origens + 1) caracteres
@
no cabeçalho do bloco para o formato diff combinado.
Diferente do formato diff unificado tradicional que exiba os dois arquivos A e B com uma única coluna que possua o sinal de menos -
(o sinal de menos — aparece em A mas é removido em B), +
(o sinal de mais — ausente em A, mas adicionado em B), ou o prefixo " "
(sem alteração — de espaço), este formato compara dois ou mais arquivos arquivo1, arquivo2, … com um arquivo X e exibe como X difere de cada arquivoN. Uma coluna para cada arquivoN é anexada à linha de saída para observar como a linha de X é diferente dela.
Um caractere -
na coluna N significa que a linha aparece no "arquivoN", mas não aparece no resultado. Um caractere +
na coluna N significa que a linha aparece no resultado e o arquivoN não possui essa linha (em outras palavras, a linha foi adicionada, do ponto de vista dessa origem).
Na saída do exemplo acima, a assinatura da função foi alterada nos dois arquivos (portanto, duas remoções -
do arquivo1 e do arquivo2, mais ++
significa que uma linha que foi adicionada não aparece no arquivo1 ou no arquivo2). Assim como, outras oito linhas também são iguais no arquivo1, mas não aparecem no arquivo2 (portanto, prefixadas com +
).
Quando exibido pelo comando git diff-tree -c
, compara as origens de um commit mesclado com o resultado da mesclagem (ou seja, arquivo1..arquivoN são as origens). Quando exibido pelo comando git diff-files -c
, as duas origens com as suas respectivas mesclagens não resolvidas com o arquivo da árvore de trabalho (ou seja, arquivo1 é o estágio 2, informado como "nossa versão", o arquivo2 é o estágio 3, informado como "a versão deles").
EXEMPLOS
-
git show v1.0.0
-
Exibe a tag
v1.0.0
junto com o objeto que a tag apontar. -
git show v1.0.0^{tree}
-
Exibe a árvore apontada pela tag
v1.0.0
. -
git show -s --format=%s v1.0.0^{commit}
-
Exiba o assunto do commit apontado pela tag
v1.0.0
. -
git show next~10:Documentation/README
-
Exibe o conteúdo do arquivo
Documentation/README
como eles estavam atualmente no décimo último commit do ramonext
. -
git show master:Makefile master:t/Makefile
-
Concatena o conteúdo dos referidos Makefiles no
HEAD
do ramomaster
.
DISCUSSÃO
O Git é, até certo ponto, um codificador de caracteres agnóstico.
-
O conteúdo dos objetos bolha (blob) são sequências de bytes não interpretadas. Não há uma tradução de codificação no nível do núcleo.
-
Os nomes do caminho são codificados na forma de normalização UTF-8 C. Isso se aplica a objetos nas árvore, arquivos do índice, referência de nomes e nomes do caminho em argumentos da linha de comando, variáveis do ambiente e os arquivos de configuração (
.git / config
(consulte git-config[1]), gitignore[5], gitattributes[5] e gitmodules[5]).Observe que o Git, em seu cerne, trata os nomes do caminho simplesmente como sequências de bytes não NUL; não há conversões de codificação do nome do caminho (exceto no Mac e no Windows). Portanto, o uso de nomes com caminho não ASCII funcionará, em geral, mesmo em plataformas e sistemas de arquivos que usam codificações ASCII estendidas legadas. No entanto, os repositórios criados nesses sistemas não funcionarão corretamente em sistemas baseados em UTF-8 (Linux, Mac, Windows por exemplo) e vice-versa. Além disso, muitas ferramentas com base no Git simplesmente assumem que os nomes de caminho são UTF-8 e não exibem outras codificações corretamente.
-
As mensagens do registro log do commit geralmente são codificadas em UTF-8, porém há compatibilidade para outras codificações ASCII estendidas. Isso inclui ISO-8859-x, CP125x e muitos outros. Porém não há compatibilidade com codificações UTF-16/32, EBCDIC e CJK, codificações de vários bytes (GBK, Shift-JIS, Big5, EUC-x, CP9xx etc.).
Embora incentivemos que as mensagens do registro do commit sejam codificadas em UTF-8, tanto o núcleo quanto o Git porcelain foram projetados para não impor o UTF-8 nos projetos. Se todos os participantes de um determinado projeto acharem mais conveniente usar codificações herdadas, o Git não o proibirá. Entretanto, há alguns aspectos que devem ser levados em consideração.
-
git commit
andgit commit-tree
issue a warning if the commit log message given to it does not look like a valid UTF-8 string, unless you explicitly say your project uses a legacy encoding. The way to say this is to havei18n.commitEncoding
in.git/config
file, like this:[i18n] commitEncoding = ISO-8859-1
Os objetos criados do commit com a configuração acima, registram o valor
i18n.commitEncoding
em seu cabeçalhoencoding
. Isso serve para ajudar as outras pessoas que forem examiná-las mais tarde. A ausência desse cabeçalho implica que a mensagem de registro do commit está codificada em UTF-8. -
git log
,git show
,git blame
and friends look at theencoding
header of a commit object, and try to re-code the log message into UTF-8 unless otherwise specified. You can specify the desired output encoding withi18n.logOutputEncoding
in.git/config
file, like this:[i18n] logOutputEncoding = ISO-8859-1
Caso não tenha essa variável de configuração, o valor de
i18n.commitEncoding
é utilizado em seu lugar.
Observe que decidimos deliberadamente não codificar novamente a mensagem do registro log do commit quando um commit for feito para forçar a codificação UTF-8 a nível do objeto commit, porque a re-codificação para UTF-8 não é necessariamente uma operação reversível.
GIT
Parte do conjunto git[1]