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
- 2.45.1 → 2.45.2 no changes
- 2.45.0
04/29/24
- 2.43.3 → 2.44.2 no changes
- 2.43.2
02/13/24
- 2.43.1 no changes
- 2.43.0
11/20/23
- 2.42.1 → 2.42.3 no changes
- 2.42.0
08/21/23
- 2.41.1 → 2.41.2 no changes
- 2.41.0
06/01/23
- 2.40.1 → 2.40.3 no changes
- 2.40.0
03/12/23
- 2.39.1 → 2.39.5 no changes
- 2.39.0
12/12/22
- 2.38.1 → 2.38.5 no changes
- 2.38.0
10/02/22
- 2.37.1 → 2.37.7 no changes
- 2.37.0
06/27/22
- 2.36.1 → 2.36.6 no changes
- 2.36.0
04/18/22
- 2.35.1 → 2.35.8 no changes
- 2.35.0
01/24/22
- 2.33.3 → 2.34.8 no changes
- 2.33.2
03/23/22
- 2.33.1
10/12/21
- 2.33.0
08/16/21
- 2.32.1 → 2.32.7 no changes
- 2.32.0
06/06/21
- 2.31.1 → 2.31.8 no changes
- 2.31.0
03/15/21
- 2.30.1 → 2.30.9 no changes
- 2.30.0
12/27/20
- 2.29.1 → 2.29.3 no changes
- 2.29.0
10/19/20
- 2.27.1 → 2.28.1 no changes
- 2.27.0
06/01/20
- 2.25.1 → 2.26.3 no changes
- 2.25.0
01/13/20
- 2.18.1 → 2.24.4 no changes
- 2.18.0
06/21/18
- 2.13.7 → 2.17.6 no changes
- 2.12.5
09/22/17
- 2.1.4 → 2.11.4 no changes
- 2.0.5
12/17/14
RESUMO
git shortlog [<opções>] [<intervalo-da-revisão>] [[--] <caminho>…] git log --pretty=short | git shortlog [<opções>]
DESCRIÇÃO
Resume a saída git log em um formato adequado para inclusão nos anúncios de lançamento. Cada commit será agrupada por autor e título.
Além disso, o "[PATCH]" será retirado da descrição do commit.
Caso nenhuma revisão seja aprovada na linha de comando e a entrada padrão não seja um terminal ou não houver uma ramificação atual, o git shortlog
exibirá um resumo do registro log lido da entrada padrão, sem referência ao repositório atual.
OPÇÕES
- -n
- --numbered
Classifique a saída de acordo com a quantidade de commits feitas pelo autor, em vez da ordem alfabética do autor.
- -s
- --summary
Suprima a descrição do commit e forneça apenas um resumo da contagem dos commits.
- -e
Exibir o endereço de email de cada autor.
- --format[=<formato>]
Instead of the commit subject, use some other information to describe each commit. <format> can be any string accepted by the
--format
option of git log, such as * [%h] %s. (See the "PRETTY FORMATS" section of git-log[1].)Cada commit bem impresso será reorganizado antes de ser exibido.
- --date=<formato>
Mostra as datas formatadas de acordo com a string de data informada. (Veja a opção
--date
na seção "Formatando o commit" do git-log[1]). É útil quando utilizado com--group=format:<formato>
.- --group=<tipo>
Grupo dos commits com base no
<tipo>
. Caso nenhuma opção--group
seja usada a predefinição éauthor
.<tipo>
é um dos:author
, os commits são agrupados pelo autorcommitter
, os commits são agrupados por aquele que faz os commits (o mesmo que-c
)trailer:<campo>
, o<campo>
é interpretado como um trecho da mensagem do commit indiferente se for maiúsculas ou minúsculas (consulte git-interpret-trailers[1]). Por exemplo, caso o seu projeto use trechosRevisados por
(Reviewed-by
), é possível ver quem tem feito a revisão através do comandogit shortlog -ns --group=trailer:reviewed-by
.O
format:<formato>
, qualquer string aceito pela opção--format
do comando git log. (Consulte a seção "FORMATOS BONITOS" do git-log[1].)Note that commits that do not include the trailer will not be counted. Likewise, commits with multiple trailers (e.g., multiple signoffs) may be counted more than once (but only once per unique trailer value in that commit).
O shortlog tentará analisar o valor de cada trecho com a identidade do
nome <email>
. Caso seja bem-sucedido, o envio dos e-mails serão aplicados e o e-mail é omitido a menos que a opção--email
seja usada. Caso o valor não possa ser analisado como uma identidade, ele será entendido de forma literal e absoluta.
Caso a opção
--group
seja usada mais de uma vez, os commits serão contados abaixo de cada valor (e novamente, apenas um a cada valor único que foi feito o commit). O comandogit shortlog --group=author --group=trailer:co-authored-by
por exemplo, conta ambos os autores e os co-autores.- -c
- --committer
É um apelido para
--group=committer
.- -w[<largura>[,<recuo1>[,<recuo2>]]]
Linewrap the output by wrapping each line at
width
. The first line of each entry is indented byindent1
spaces, and the second and subsequent lines are indented byindent2
spaces.width
,indent1
, andindent2
default to 76, 6 and 9 respectively.Caso a largura seja
0
(zero), recue as linhas da saída sem quebrá-las.- <revisão-faixa>
Show only commits in the specified revision range. When no <revision-range> is specified, it defaults to
HEAD
(i.e. the whole history leading to the current commit).origin..HEAD
specifies all the commits reachable from the current commit (i.e.HEAD
), but not fromorigin
. For a complete list of ways to spell <revision-range>, see the "Specifying Ranges" section of gitrevisions[7].- [--] <caminho>…
Considere apenas os commits que são suficientes para explicar como os arquivos que coincidam com determinados caminhos foram criados.
Os caminhos podem precisar ser prefixados com um
--
para separá-los das opções ou do intervalo de revisões, quando um conflito surgir.
Limitação do Commit
Além de especificar uma série de commits que devem ser listados utilizando as notações especiais explicadas na descrição, podem ser aplicadas limitações adicionais ao commit.
Using more options generally further limits the output (e.g. --since=<date1>
limits to commits newer than <date1>
, and using it with --grep=<pattern>
further limits to commits whose log message has a line that matches <pattern>
), unless otherwise noted.
Observe que eles são aplicados antes da organização do commit e das opções de formatação como --reverse
.
- -<quantidade>
- -n <quantidade>
- --max-count=<quantidade>
Limita a quantidade de commits na saída.
- --skip=<quantidade>
Ignora a 'quantidade’de commits antes começa a exibir a saída do commit.
- --since=<data>
- --after=<data>
Exiba os commits com data mais recente das que foram informada.
- --since-as-filter=<data>
Mostra todos os commits mais recentes do que uma determinada data. Isso avalia todos os commits que estejam neste intervalo, em vez de parar no primeiro commit que for o mais antigo que uma determinada data.
- --until=<data>
- --before=<data>
Exiba os commits mais antigos com data mais antiga das que foram informada.
- --author=<padrão>
- --committer=<padrão>
Limit the commits output to ones with author/committer header lines that match the specified pattern (regular expression). With more than one
--author=<pattern>
, commits whose author matches any of the given patterns are chosen (similarly for multiple--committer=<pattern>
).- --grep-reflog=<padrão>
Limit the commits output to ones with reflog entries that match the specified pattern (regular expression). With more than one
--grep-reflog
, commits whose reflog message matches any of the given patterns are chosen. It is an error to use this option unless--walk-reflogs
is in use.- --grep=<padrão>
Limit the commits output to ones with a log message that matches the specified pattern (regular expression). With more than one
--grep=<pattern>
, commits whose message matches any of the given patterns are chosen (but see--all-match
).Quando
--notes
está em vigor, a mensagem das anotações é coincidida como se fizesse parte da mensagem do registro log.- --all-match
Limita a saída dos commits para aqueles que coincidam com todos os comandos
--grep
utilizado, em vez daqueles que coincidam com apenas um.- --invert-grep
Limita a saída dos commits para aqueles com uma mensagem de um registro log que não coincida com o padrão utilizado em com o comando
--grep=<padrão>
.- -i
- --regexp-ignore-case
Coincida a expressão regular limitando o padrão sem considerar o tamanho das letras.
- --basic-regexp
Considere os padrões limitadores como expressões regulares básicas; Essa é a predefinição.
- -E
- --extended-regexp
Considere os padrões de limitação a serem estendidos nas expressões regulares em vez das expressões regulares básicas predefinidas.
- -F
- --fixed-strings
Considere os padrões limitadores como cadeias de caracteres fixos (não interprete o padrão como uma expressão regular).
- -P
- --perl-regexp
Considere os padrões limitadores como expressões regulares compatíveis com o Perl.
A compatibilidade para estes tipos de expressões regulares é uma dependência opcional no momento da compilação. Caso o Git não tenha sido compilado com este suporte, o Git será encerrado caso esta opção seja utilizada.
- --remove-empty
Pare quando um caminho informado tenha desaparecido da árvore.
- --merges
Exiba apenas os commits que foram mesclados. É exatamente o mesmo que a opção
--min-parents=2
.- --no-merges
Não imprima os commits com mais de um pai. É exatamente o mesmo que a opção
--max-parents=1
.- --min-parents=<quantidade>
- --max-parents=<quantidade>
- --no-min-parents
- --no-max-parents
Show only commits which have at least (or at most) that many parent commits. In particular,
--max-parents=1
is the same as--no-merges
,--min-parents=2
is the same as--merges
.--max-parents=0
gives all root commits and--min-parents=3
all octopus merges.--no-min-parents
and--no-max-parents
reset these limits (to no limit) again. Equivalent forms are--min-parents=0
(any commit has 0 or more parents) and--max-parents=-1
(negative numbers denote no upper limit).- --first-parent
When finding commits to include, follow only the first parent commit upon seeing a merge commit. This option can give a better overview when viewing the evolution of a particular topic branch, because merges into a topic branch tend to be only about adjusting to updated upstream from time to time, and this option allows you to ignore the individual commits brought in to your history by such a merge.
- --exclude-first-parent-only
When finding commits to exclude (with a ^), follow only the first parent commit upon seeing a merge commit. This can be used to find the set of changes in a topic branch from the point where it diverged from the remote branch, given that arbitrary merges can be valid topic branch changes.
- --not
Reverses the meaning of the ^ prefix (or lack thereof) for all following revision specifiers, up to the next
--not
. When used on the command line before --stdin, the revisions passed through stdin will not be affected by it. Conversely, when passed via standard input, the revisions passed on the command line will not be affected by it.- --all
Finja como se todos os refs em
refs/
junto comHEAD
estejam listados na linha de comando como <commit>.- --branches[=<padrão>]
Pretend as if all the refs in
refs/heads
are listed on the command line as <commit>. If <pattern> is given, limit branches to ones matching given shell glob. If pattern lacks ?, *, or [, /* at the end is implied.- --tags[=<padrão>]
Pretend as if all the refs in
refs/tags
are listed on the command line as <commit>. If <pattern> is given, limit tags to ones matching given shell glob. If pattern lacks ?, *, or [, /* at the end is implied.- --remotes[=<padrão>]
Pretend as if all the refs in
refs/remotes
are listed on the command line as <commit>. If <pattern> is given, limit remote-tracking branches to ones matching given shell glob. If pattern lacks ?, *, or [, /* at the end is implied.- --glob=<glob-pattern>
Pretend as if all the refs matching shell glob <glob-pattern> are listed on the command line as <commit>. Leading refs/, is automatically prepended if missing. If pattern lacks ?, *, or [, /* at the end is implied.
- --exclude=<glob-pattern>
Não inclua as refs que coincidam com
<glob-pattern>
em que as próximas opções--all
,--branches
,--tags
,--remotes
ou--glob
considerariam de outra forma. As repetições destas opções acumulam padrões de exclusão até a próxima opção--all
,--branches
,--tags
,--remotes
ou--glob
(outras opções ou argumentos não limpam os padrões acumulados).The patterns given should not begin with
refs/heads
,refs/tags
, orrefs/remotes
when applied to--branches
,--tags
, or--remotes
, respectively, and they must begin withrefs/
when applied to--glob
or--all
. If a trailing /* is intended, it must be given explicitly.Não inclua refs que seriam ocultados por
git-fetch
,git-receive-pack
ougit-upload-pack
durante a consulta da configuração apropriada defetch.hideRefs
,receive.hideRefs
ouuploadpack.hideRefs
junto comtransfer.hideRefs
(consulte git-config[1]). Esta opção afeta a próxima opção pseudo-ref--all
ou--glob
e é zerada após o processamento.- --reflog
Finja que todos os objetos mencionados pelos
reflogs
estejam listados na linha de comando como<commit>
.- --alternate-refs
Pretend as if all objects mentioned as ref tips of alternate repositories were listed on the command line. An alternate repository is any repository whose object directory is specified in
objects/info/alternates
. The set of included objects may be modified bycore.alternateRefsCommand
, etc. See git-config[1].- --single-worktree
By default, all working trees will be examined by the following options when there are more than one (see git-worktree[1]):
--all
,--reflog
and--indexed-objects
. This option forces them to examine the current working tree only.- --ignore-missing
Ao ver um nome de objeto inválido na entrada, finja que a entrada incorreta não foi informada.
- --bisect
Finja como se uma bisseção ruim "ref"
refs/bisect/bad
estivesse listada e como se fosse seguida por--not
e a boa bisseção refsrefs/bisect/good-*
na linha de comando.- --stdin
Além de obter argumentos da linha de comando, leia-os também da entrada padrão. Isso faz aceitar commits e pseudo-opções como
--all
e--glob=
. Quando um separador--
é visto, a próxima entrada é tratada como caminhos e usada para limitar o resultado. Sinalizadores como--not
, que são lidos por meio da entrada padrão, são respeitados apenas com argumentos passados da mesma forma e não influenciarão nenhum argumento subsequente da linha de comando.- --cherry-mark
Como
--cherry-pick
(veja abaixo), porém marque os commits equivalentes com=
ao invés de omiti-los e equivalentes com+
.- --cherry-pick
Omitir qualquer commit que apresente a mesma alteração como em outro commit do ``outro lado" quando o conjunto de commits são limitadas com diferença simétrica.
Como por exemplo, caso você tenha dois ramos,
A
eB
, uma maneira comum de listar todos os commits em apenas um lado deles é com a opção--left-right
(veja o exemplo abaixo na descrição da opção--left-right
). No entanto, exibe os commits que foram selecionados de forma seletiva no outro ramo (por exemplo, “3º no b” pode ser a escolha seletiva do ramoA
). Com esta opção, estes pares de commits são excluídos da saída.- --left-only
- --right-only
Liste apenas os commits nos respectivos lados de um "diff" simétrico, ou seja, apenas aqueles que seriam marcados como
<
resp.>
por--left-right
.For example,
--cherry-pick --right-only A...B
omits those commits fromB
which are inA
or are patch-equivalent to a commit inA
. In other words, this lists the+
commits fromgit cherry A B
. More precisely,--cherry-pick --right-only --no-merges
gives the exact list.- --cherry
Um sinônimo para
--right-only --cherry-mark --no-merges
; útil para limitar a saída dos commits do nosso lado e marcar aqueles que forem marcados no histórico bifurcado do outro lado comgit log --cherry upstream...meu-ramo
, semelhante aogit cherry upstream meu-ramo
.- -g
- --walk-reflogs
Instead of walking the commit ancestry chain, walk reflog entries from the most recent one to older ones. When this option is used you cannot specify commits to exclude (that is, ^commit, commit1..commit2, and commit1...commit2 notations cannot be used).
With
--pretty
format other thanoneline
andreference
(for obvious reasons), this causes the output to have two extra lines of information taken from the reflog. The reflog designator in the output may be shown asref@{Nth}
(whereNth
is the reverse-chronological index in the reflog) or asref@{timestamp}
(with the timestamp for that entry), depending on a few rules:Caso o ponto inicial seja utilizado como
ref@{Nth}
, exiba o formato do índice.Caso o ponto inicial seja utilizado como
ref@{now}
, exiba o formato do registro de data e hora.Caso nenhum deles tenha sido utilizado, mas a opção
--date
foi utilizado na linha de comando, exibe o registro de data e hora no formato solicitado por--date
.Caso contrário, exibe o formato do índice.
Under
--pretty=oneline
, the commit message is prefixed with this information on the same line. This option cannot be combined with--reverse
. See also git-reflog[1].Esta informação não será exibida de forma alguma sob
--pretty=reference
.- --merge
Após uma falha na mesclagem, exiba as refs que estão em atrito com os arquivos e não existam em todos os
HEADS
que serão mesclados.- --boundary
O limite da exclusão dos commits que forem gerados. Os limites entre os commits são prefixados com
-
.
Simplificação do histórico
Às vezes, você está interessado apenas nas partes do histórico, por exemplo, os commit que alteraram um determinado <caminho>. Porém existem duas partes da Simplificação do Histórico, uma parte é a seleção dos commits e a outra é como fazê-lo, pois existem várias estratégias para simplificar o histórico.
As seguintes opções selecionam os commits que serão exibidos:
Observe que os commits extras podem ser exibidos para fornecer um histórico significativo.
As seguintes opções afetam a maneira como a simplificação é feita:
- Modo predefinido
Simplifique o histórico para o mais simples, explicando a condição final da árvore. Mais simples, porque elimina algumas ramificações laterais caso o resultado final for o mesmo (ou seja, mescle os ramos com o mesmo conteúdo)
- --show-pulls
Inclua todas os commits no modo predefinido, porém também qualquer commits mesclado que não sejam TREESAME para o primeiro parente, porém sejam TREESAME para um parente posterior. Este modo auxilia na exibição do commit mesclado que "introduziu primeiro" a alteração em um ramo.
- --full-history
O mesmo que o modo predefinido, mas não corta parte do histórico.
- --dense
Apenas os commits selecionados são exibidos e mais alguns que tenham algum histórico significante.
- --sparse
São exibidos todos os commits com um histórico simplificado.
- --simplify-merges
Opção adicional para
--full-history
para remover algumas mesclagens desnecessárias do histórico resultante, pois não há commits selecionados contribuindo para essa mesclagem.- --ancestry-path[=<commit>]
When given a range of commits to display (e.g. commit1..commit2 or commit2 ^commit1), only display commits in that range that are ancestors of <commit>, descendants of <commit>, or <commit> itself. If no commit is specified, use commit1 (the excluded part of the range) as <commit>. Can be passed multiple times; if so, a commit is included if it is any of the commits given or if it is an ancestor or descendant of one of them.
Segue explicações com mais detalhes.
Suppose you specified foo
as the <paths>. We shall call commits that modify foo
!TREESAME, and the rest TREESAME. (In a diff filtered for foo
, they look different and equal, respectively.)
In the following, we will always refer to the same example history to illustrate the differences between simplification settings. We assume that you are filtering for a file foo
in this commit graph:
.-A---M---N---O---P---Q / / / / / / I B C D E Y \ / / / / / `-------------' X
The horizontal line of history A---Q is taken to be the first parent of each merge. The commits are:
O
I
é o commit inicial ondefoo
existe com o conteúdo “asdf” e existe um arquivoquux
com o conteúdo`quux ''. Os commits iniciais são comparados com uma árvore vazia, então o `I
é !TREESAME.Em
A
,foo
contém apenas “foo”.B
contains the same change asA
. Its mergeM
is trivial and hence TREESAME to all parents.O
C
não mudafoo
, mas a sua mesclagemN
o altera para “foobar”, portanto não é TREESAME para nenhum dos pais.D
definefoo
para “baz”. MesclaO
combinado com textos vindos de ` N` eD
a “foobarbaz”; ou seja, não é "TREESAME" para nenhuma das origens.O
E
alteraquux
para “xyzzy” e a sua mesclagemP
combina as sequências dos caracteres para “quux xyzzy”. OP
é TREESAME paraO
, porém não paraE
.O
X
é um commit raiz independente que adicionou um novo arquivoside
, eY
o alterou. OY
é TREESAME paraX
. MesclaQ
adicionouside
paraP
, eQ
e TREESAME paraP
, mas não paraY
.
O rev list
retrocede no histórico, incluindo ou excluindo os commits com base no uso do --full-history
e/ou na reescrita dos pais (através da opção --parents
ou --children
). As seguintes configurações estão disponíveis.
- Modo predefinido
Commits are included if they are not TREESAME to any parent (though this can be changed, see
--sparse
below). If the commit was a merge, and it was TREESAME to one parent, follow only that parent. (Even if there are several TREESAME parents, follow only one of them.) Otherwise, follow all parents.Isso resulta em:
.-A---N---O / / / I---------D
Note how the rule to only follow the TREESAME parent, if one is available, removed
B
from consideration entirely.C
was considered viaN
, but is TREESAME. Root commits are compared to an empty tree, soI
is !TREESAME.As relações entre pai/filho são visíveis apenas com
--parents
, porém isso não afeta os commits selecionados no modo predefinido, portanto, mostramos as linhas dos pais.--full-history
sem reescrita anteriorThis mode differs from the default in one point: always follow all parents of a merge, even if it is TREESAME to one of them. Even if more than one side of the merge has commits that are included, this does not imply that the merge itself is! In the example, we get
I A B N D O P Q
M
was excluded because it is TREESAME to both parents.E
,C
andB
were all walked, but onlyB
was !TREESAME, so the others do not appear.Observe que, sem reescrever os pais, não é realmente possível falar sobre os relacionamentos pai/filho entre os commits, portanto, mostramos-lhes desconectados.
--full-history
com reescrita anteriorOs commits comuns são incluídos apenas se forem !TREESAME (embora é possível alterar isso, consulte
--sparse
abaixo).Merges are always included. However, their parent list is rewritten: Along each parent, prune away commits that are not included themselves. This results in
.-A---M---N---O---P---Q / / / / / I B / D / \ / / / / `-------------'
Compare to
--full-history
without rewriting above. Note thatE
was pruned away because it is TREESAME, but the parent list of P was rewritten to containE
's parentI
. The same happened forC
andN
, andX
,Y
andQ
.
Além das configurações acima, é possível alterar se o TREESAME afeta a inclusão:
- --dense
Os commits encaminhados serão incluídos caso não sejam um TREESAME para nenhum dos parentes.
- --sparse
Todos os commits que forem passados serão incluidos.
Note that without
--full-history
, this still simplifies merges: if one of the parents is TREESAME, we follow only that one, so the other sides of the merge are never walked.- --simplify-merges
Primeiro, construa um grafo do histórico da mesma maneira que
--full-history
com a reescrita dos parentes (veja acima).Simplifique cada commit
C
para a sua reposiçãoC'
no histórico final, de acordo com as seguintes regras:Defina
C'
paraC
.Replace each parent
P
ofC'
with its simplificationP'
. In the process, drop parents that are ancestors of other parents or that are root commits TREESAME to an empty tree, and remove duplicates, but take care to never drop all parents that we are TREESAME to.If after this parent rewriting,
C'
is a root or merge commit (has zero or >1 parents), a boundary commit, or !TREESAME, it remains. Otherwise, it is replaced with its only parent.
The effect of this is best shown by way of comparing to
--full-history
with parent rewriting. The example turns into:.-A---M---N---O / / / I B D \ / / `---------'
Observe que as maiores diferenças entre
N
,P
, eQ
sobre--full-history
:N
's parent list hadI
removed, because it is an ancestor of the other parentM
. Still,N
remained because it is !TREESAME.P
's parent list similarly hadI
removed.P
was then removed completely, because it had one parent and is TREESAME.A lista de pais de
Q
tinha` Y` simplificado paraX
. OX
foi então removido, porque era uma raiz TREESAME. OQ
foi removido completamente, porque tinha um pai e é TREESAME.
Há um outra modo de simplificação disponível:
- --ancestry-path[=<commit>]
Limite os commits exibidos àqueles que sejam ancestrais do <commit>, ou que sejam descendentes do <commit>, ou são o <commit> em si.
Como um exemplo de caso, considere o seguinte histórico do commit:
D---E-------F / \ \ B---C---G---H---I---J / \ A-------K---------------L--M
Um D..M regular calcula o conjunto dos commits que são ancestrais do
M
, mas exclui os que são ancestrais doD
. Isso é útil para ver o que aconteceu com a história que levou aM
desde oD
, no sentido que “o queM
possui e que não existia emD
”. O resultado neste exemplo seria todos os commits, excetoA
eB
(eD
, obviamente).When we want to find out what commits in
M
are contaminated with the bug introduced byD
and need fixing, however, we might want to view only the subset of D..M that are actually descendants ofD
, i.e. excludingC
andK
. This is exactly what the--ancestry-path
option does. Applied to the D..M range, it results in:E-------F \ \ G---H---I---J \ L--M
Também podemos usar
--ancestry-path=D
em vez de--ancestry-path
que significa a mesma coisa quando é aplicado ao intervalo D..M, porém, é apenas mais explícito.If we instead are interested in a given topic within this range, and all commits affected by that topic, we may only want to view the subset of
D..M
which contain that topic in their ancestry path. So, using--ancestry-path=H D..M
for example would result in:E \ G---H---I---J \ L--M
Onde
--ancestry-path=K D..M
resultará emK---------------L--M
Antes de discutir outra opção, --show-pulls
, precisamos criar um novo histórico de exemplo.
Um problema comum que os usuários enfrentam ao examinar o histórico simplificado é que um commit que eles conhecem alterou um arquivo e que de alguma maneira não aparece no histórico simplificado do arquivo. Vamos demonstrar um novo exemplo e exibir como as opções como --full-history
e --simplify-merges
funcionam neste caso:
.-A---M-----C--N---O---P / / \ \ \/ / / I B \ R-'`-Z' / \ / \/ / \ / /\ / `---X--' `---Y--'
For this example, suppose I
created file.txt
which was modified by A
, B
, and X
in different ways. The single-parent commits C
, Z
, and Y
do not change file.txt
. The merge commit M
was created by resolving the merge conflict to include both changes from A
and B
and hence is not TREESAME to either. The merge commit R
, however, was created by ignoring the contents of file.txt
at M
and taking only the contents of file.txt
at X
. Hence, R
is TREESAME to X
but not M
. Finally, the natural merge resolution to create N
is to take the contents of file.txt
at R
, so N
is TREESAME to R
but not C
. The merge commits O
and P
are TREESAME to their first parents, but not to their second parents, Z
and Y
respectively.
Ao utilizar os modos predefinidos, ambos os N
e R
tem um pai TREESAME, então aquelas bordas são percorridas e outras são ignoradas. E o grafo resultante no histórico é:
I---X
Ao utilizar a opção --full-history
, O Git percorre cada canto. Descobre se os commits A
, B
e o mesclado M
, porém também revela se o commit mesclado O
e P
. Com a reescrita do pai, o resultado do grafo é:
.-A---M--------N---O---P / / \ \ \/ / / I B \ R-'`--' / \ / \/ / \ / /\ / `---X--' `------'
Aqui, a mesclagem do commit O
e P
contribuem com um ruído extra, pois na verdade não contribuíram com uma alteração no file.txt
. Eles mesclaram apenas um topic com base numa versão mais antiga do file.txt
. Este é um problema comum em repositórios que utilizam um fluxo de trabalho onde que muitos colaboradores trabalham em paralelo e mesclam as suas ramificações dos tópicos em um único tronco: muitas mesclagens não relacionadas aparecem nos resultados da opção --full-history
.
Ao utilizar a opção --simplify-merges
, os commits O
e P
desaparecem dos resultados. Pois as reescritas do segundo pai de O
e P
são acessíveis a partir dos seus primeiros pais. Estes cantos são removidos e então os commits se parecem com commits com pai singular só que são TREESAME em relação aos seus pais. Isso também acontece ao commit N
, resultando no histórico a seguir:
.-A---M--. / / \ I B R \ / / \ / / `---X--'
Nesta visão, vemos todas as alterações importantes da única origem vindas de A
, B
e X
. Também vemos a mesclagem cuidadosamente resolvida de M
e a mesclagem nem tão bem resolvida do R
. Geralmente são informações suficientes para determinar por que os commit A
e B
"desapareceram" do histórico na visualização predefinida. No entanto, existem alguns problemas com esta abordagem.
O primeiro problema é o desempenho. Diferente das opções anteriores, a opção --simplify-merges
precisa percorrer todo o histórico do commit antes de retornar um único resultado. Isso pode fazer com que a opção seja difícil de usar em repositórios muito grandes.
O segundo problema é a auditoria. Quando muitos colaboradores estão trabalhando no mesmo repositório, é importante saber qual mesclagem do commit introduziu uma importante alteração no ramo. A mesclagem problemática R
acima não parece ser o commit mesclado que foi utilizado na mesclagem de um ramo importante. Em vez disso, a mesclagem N
foi utilizada para mesclar R
e X
em um importante ramo. Este commit por ter informação sobre o por que do X
chegou a substituir as alterações do A
e B
em suas mensagens do commit.
- --show-pulls
Além dos commits exibidos no histórico predefinido, exiba cada mesclagem do commit que não seja TREESAME para o primeiro parente, porém que seja TREESAME para um parente posterior.
Quando a mesclagem de um commit é incluso através da opção
--show-pulls
, a mesclagem é tratada como tivesse "capturado" as alterações de um outro ramo. Ao usar a opção--show-pulls
nest exemplo (e em nenhuma outra opção) o grafo resultante será:I---X---R---N
Aqui, a mesclagem do commit
R
eN
são incluídos porque obtiveram os commitsX
eR
para o ramo base, respectivamente. Essas mesclagens são a razão pela qual os commitsA
eB
não aparecem no histórico predefinido.Quando a opção
--show-pulls
for usado em conjunto com--simplify-merges
, o grafo incluí todas as informações necessárias:.-A---M--. N / / \ / I B R \ / / \ / / `---X--'
Repare que desde que
M
seja acessível deR
, o canto deN
paraM
foi simplificado. No entanto, oN
ainda aparece no histórico como um commit importante porque ele "obteve" as alterações vindas deR
para o ramo principal.
The --simplify-by-decoration
option allows you to view only the big picture of the topology of the history, by omitting commits that are not referenced by tags. Commits are marked as !TREESAME (in other words, kept after history simplification rules described above) if (1) they are referenced by tags, or (2) they change the contents of the paths given on the command line. All other commits are marked as TREESAME (subject to be simplified away).
MAPEANDO AUTORES
Consulte gitmailmap[5].
Observe que caso o comando git shortlog
seja executado fora de um repositório (para processar o conteúdo do log na entrada predefinida), ele irá procurar por um arquivo` .mailmap` no diretório atual.
GIT
Parte do conjunto git[1]