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.44.1 → 2.44.2 no changes
- 2.44.0
02/23/24
- 2.43.1 → 2.43.5 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.39.4 → 2.40.3 no changes
- 2.39.3
04/17/23
- 2.39.1 → 2.39.2 no changes
- 2.39.0
12/12/22
- 2.37.3 → 2.38.5 no changes
- 2.37.2
08/11/22
- 2.33.1 → 2.37.1 no changes
- 2.33.0
08/16/21
- 2.31.1 → 2.32.7 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.23.1 → 2.24.4 no changes
- 2.23.0
08/16/19
- 2.22.1 → 2.22.5 no changes
- 2.22.0
06/07/19
- 2.19.1 → 2.21.4 no changes
- 2.19.0
09/10/18
- 2.18.1 → 2.18.5 no changes
- 2.18.0
06/21/18
- 2.17.0 → 2.17.6 no changes
- 2.16.6
12/06/19
- 2.15.4
12/06/19
- 2.14.6 no changes
- 2.13.7
05/22/18
- 2.12.5
09/22/17
- 2.11.4
09/22/17
- 2.10.5
09/22/17
- 2.9.5
07/30/17
- 2.8.6
07/30/17
- 2.6.7 → 2.7.6 no changes
- 2.5.6
05/05/17
- 2.4.12
05/05/17
- 2.3.10 no changes
- 2.2.3
09/04/15
- 2.1.4
12/17/14
- 2.0.5
12/17/14
DESCRIÇÃO
Many Git porcelainish commands take a mixture of flags (i.e. parameters that begin with a dash -) and parameters meant for the underlying git rev-list command they use internally and flags and parameters for the other commands they use downstream of git rev-list. This command is used to distinguish between them.
OPÇÕES
Modos de Operação
Cada uma destas opções deve aparecer primeiro na linha de comando.
- --parseopt
Utilize o comando git rev-parse no modo de análise de opções (consulte a seção "PARSEOPT" abaixo).
- --sq-quote
Utilize o comando git rev-parse em modo de citação shell (consulte a seção "SQ-QUOTE" abaixo). Ao contrário da opção
--sq
abaixo, este modo apenas cita. Nada mais é feito para comandar a entrada.
As opções para --parseopt
- --keep-dashdash
Apenas faz sentido no modo
--parseopt
. Informa ao analisador das opções para ecoar o primeiro--
encontrado em vez de ignorá-lo.- --stop-at-non-option
Only meaningful in
--parseopt
mode. Lets the option parser stop at the first non-option argument. This can be used to parse sub-commands that take options themselves.- --stuck-long
Apenas faz sentido no modo
--parseopt
. Gere as opções em sua forma longa, caso estejam disponíveis, e com os seus argumentos bloqueados.
Opções para a Saída
- --default <arg>
Caso não haja nenhum parâmetro informado pelo usuário, em vez disso utilize
<arg>
.- --prefix <arg>
Behave as if git rev-parse was invoked from the
<arg>
subdirectory of the working tree. Any relative filenames are resolved as if they are prefixed by<arg>
and will be printed in that form.This can be used to convert arguments to a command run in a subdirectory so that they can still be used after moving to the top-level of the repository. For example:
prefix=$(git rev-parse --show-prefix) cd "$(git rev-parse --show-toplevel)" # rev-parse provides the -- needed for 'set' eval "set $(git rev-parse --sq --prefix "$prefix" -- "$@")"
- --verify
Verifique que exatamente um parâmetro seja informado e se pode ser transformado num SHA-1 com 20 bytes brutos, que possa ser utilizado para acessar o banco de dados do objeto. Em caso positivo, emita-o para a saída padrão; caso contrário, gere um erro.
If you want to make sure that the output actually names an object in your object database and/or can be used as a specific type of object you require, you can add the
^{type}
peeling operator to the parameter. For example,git rev-parse "$VAR^{commit}"
will make sure$VAR
names an existing object that is a commit-ish (i.e. a commit, or an annotated tag that points at a commit). To make sure that$VAR
names an existing object of any type,git rev-parse "$VAR^{object}"
can be used.Note que se você estiver verificando um nome de uma fonte não confiável, é prudente usar a opção
--end-of-options
para que o argumento relacionado ao nome não seja confundido com uma outra opção.- -q
- --quiet
Only meaningful in
--verify
mode. Do not output an error message if the first argument is not a valid object name; instead exit with non-zero status silently. SHA-1s for valid object names are printed to stdout on success.- --sq
Usually the output is made one line per flag and parameter. This option makes output a single line, properly quoted for consumption by shell. Useful when you expect your parameter to contain whitespaces and newlines (e.g. when using pickaxe
-S
with git diff-*). In contrast to the--sq-quote
option, the command input is still interpreted as usual.- --short[=length]
O mesmo que
--verify
porém encurta o nome do objeto para um prefixo único com pelo menos um`comprimento` determinado de caracteres. A quantidade mínima é de 4 caracteres, o valor é predefinido na variável de configuraçãocore.abbrev
(consulte git-config[1]).- --not
Ao exibir os nomes dos objetos, prefixe-os com ^ e retire o prefixo ^ dos nomes dos objetos que já possuam um.
- --abbrev-ref[=(strict|loose)]
A non-ambiguous short name of the objects name. The option core.warnAmbiguousRefs is used to select the strict abbreviation mode.
- --symbolic
Normalmente, os nomes dos objetos são emitidos em formato SHA-1 (com possível prefixo ^); essa opção faz com que eles sejam impressos o mais próximo possíveis da entrada original.
- --symbolic-full-name
É semelhante ao
--symbolic
, porém omite a entrada que não seja uma refs (por exemplo, os nomes dos ramos ou tags; ou de uma forma explicitamente desambiguante "heads/master", quando você quer nomear a o ramo "master" quando houver uma tag com o nome "master") e mostre-os como "refnames" completos (por exemplo, "refs/heads/master").
Opções para os Objetos
- --all
Exibe todas as refs encontradas em
refs/
.- --branches[=pattern]
- --tags[=pattern]
- --remotes[=pattern]
Exibe todos as ramificações, tags ou ramificações monitoradas remotamente, respectivamente (ou seja, as refs encontradas respectivamente em
refs/heads
,refs/tags
ourefs/remotes
).If a
pattern
is given, only refs matching the given shell glob are shown. If the pattern does not contain a globbing character (?
,*
, or[
), it is turned into a prefix match by appending/*
.- --glob=pattern
Show all refs matching the shell glob pattern
pattern
. If the pattern does not start withrefs/
, this is automatically prepended. If the pattern does not contain a globbing character (?
,*
, or[
), it is turned into a prefix match by appending/*
.- --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.- --disambiguate=<prefixo>
Show every object whose name begins with the given prefix. The <prefix> must be at least 4 hexadecimal digits long to avoid listing each and every object in the repository by mistake.
Opções para os Arquivos
- --local-env-vars
List the GIT_* environment variables that are local to the repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR). Only the names of the variables are listed, not their value, even if they are set.
- --path-format=(absolute|relative)
Controls the behavior of certain other options. If specified as absolute, the paths printed by those options will be absolute and canonical. If specified as relative, the paths will be relative to the current working directory if that is possible. The default is option specific.
Esta opção pode ser usada várias vezes e afeta apenas os argumentos seguintes na linha de comando, seja no final da linha de comando ou na próxima instância desta opção.
As seguintes opções são modificadas pela opção --path-format
:
- --git-dir
Exibe o
$GIT_DIR
caso seja definido. Caso contrário, exibe o caminho para o diretório .git. O caminho exibido, quando relativo, é relativo ao diretório de trabalho atual.Caso o
$GIT_DIR
não esteja definido e o diretório atual não for detectado como estando num repositório Git ou na árvore de trabalho, imprima uma mensagem para stderr e encere com uma condição diferente de zero.- --git-common-dir
Exibe o
$GIT_COMMON_DIR
caso seja definido, senão$GIT_DIR
.- --resolve-git-dir <caminho>
Check if <path> is a valid repository or a gitfile that points at a valid repository, and print the location of the repository. If <path> is a gitfile then the resolved path to the real repository is printed.
- --git-path <caminho>
Resolva "$GIT_DIR/<caminho>" e leve em consideração as outras variáveis de realocação do caminho, como
$GIT_OBJECT_DIRECTORY
,$GIT_INDEX_FILE
, etc. Caso$GIT_OBJECT_DIRECTORY
seja definido para /foo/bar por exemplo, então o comando "git rev-parse --git-path objects/abc" returna /foo/bar/abc.- --show-toplevel
Mostra o caminho (absoluto) do cume do diretório da árvore de trabalho. Caso não haja uma árvore de trabalho, relate um erro.
- --show-superproject-working-tree
Show the absolute path of the root of the superproject’s working tree (if exists) that uses the current repository as its submodule. Outputs nothing if the current repository is not used as a submodule by any project.
Exibe o caminho para o arquivo do índice compartilhado no modo de índice dividido ou vazio caso não esteja no modo do índice dividido.
As seguintes opções não são afetadas pela opção --path-format
:
- --absolute-git-dir
Como
--git-dir
, porém sua saída é sempre o caminho absoluto canonizado.- --is-inside-git-dir
Quando o diretório de trabalho atual estiver abaixo do diretório do repositório, imprima true, caso contrário, false.
- --is-inside-work-tree
Quando o diretório de trabalho atual estiver dentro da árvore de trabalho do repositório, imprima true, caso contrário, false.
- --is-bare-repository
Quando o repositório for simples imprima true, caso contrário false.
- --is-shallow-repository
Quando o repositório é raso, imprima true, caso contrário, false.
- --show-cdup
Quando o comando é chamado a partir de um subdiretório, exiba o caminho do diretório do nível mais alto em relação ao diretório atual (geralmente uma sequência de "../" ou uma sequência vazia).
- --show-prefix
Quando o comando é invocado a partir de um subdiretório, exiba o caminho do diretório atual em relação ao nível mais alto do diretório.
- --show-object-format[=(storage|input|output)]
Show the object format (hash algorithm) used for the repository for storage inside the
.git
directory, input, or output. For input, multiple algorithms may be printed, space-separated. If not specified, the default is "storage".- --show-ref-format
Show the reference storage format used for the repository.
Outras Opções
- --since=datestring
- --after=datestring
Analise a cadeia de caracteres da data e exiba o parâmetro --max-age= correspondente para git rev-list.
- --until=datestring
- --before=datestring
Analise a cadeia de caracteres da data e exiba o parâmetro --min-age= que corresponda para o git rev-list.
- <args>…
As opções e os parâmetros que serão analisados.
DEFININDO AS REVISÕES
A revision parameter <rev> typically, but not necessarily, names a commit object. It uses what is called an extended SHA-1 syntax. Here are various ways to spell object names. The ones listed near the end of this list name trees and blobs contained in a commit.
Note | Este documento demonstra a sintaxe "bruta" como vista pelo git. O shell e outras UIs podem exigir citações adicionais para proteger os caracteres especiais e evitar a divisão de palavras. |
- <sha1>, exemplo. dae86e1950b1277e545cee180551750029cfe735, dae86e
The full SHA-1 object name (40-byte hexadecimal string), or a leading substring that is unique within the repository. E.g. dae86e1950b1277e545cee180551750029cfe735 and dae86e both name the same commit object if there is no other object in your repository whose object name starts with dae86e.
- <describeOutput>, exemplo. v1.7.4.2-679-g3bee7fb
A saída do
git describe
; ou seja, um tag mais próximo opcionalmente seguido por um traço e um número do commit seguido por um traço, um g e um nome abreviado do objeto.- <refname>, exemplo. master, heads/master, refs/heads/master
A symbolic ref name. E.g. master typically means the commit object referenced by refs/heads/master. If you happen to have both heads/master and tags/master, you can explicitly say heads/master to tell Git which one you mean. When ambiguous, a <refname> is disambiguated by taking the first match in the following rules:
Se $GIT_DIR/<refname> existir, é isso que você quer dizer (isso geralmente é útil apenas para
HEAD
,FETCH_HEAD
,ORIG_HEAD
,MERGE_HEAD
,REBASE_HEAD
,REVERT_HEAD
,CHERRY_PICK_HEAD
,BISECT_HEAD
eAUTO_MERGE
);caso contrário, utilize refs/<refname> caso exista;
caso contrário, utilize refs/tags/<refname> caso exista;
caso contrário, utilize refs/heads/<refname> caso exista;
caso contrário, utilize refs/remotes/<refname> caso exista;
caso contrário, utilize refs/remotes/<refname>/HEAD caso exista.
HEAD
nomeia o commit no qual você baseou as alterações na árvore de trabalho.
FETCH_HEAD
registra o ramo que você obteve de um repositório remoto com a sua última invocação
git fetch
.ORIG_HEAD
é criado por comandos que movem seu
HEAD
de forma drástica (git am
,git merge
,git rebase
,git reset
), para registrar a posição doHEAD
antes de sua operação, para que você possa alterar facilmente o cume da ramificação de volta ao estado anterior à sua execução.MERGE_HEAD
registra o(s) commit(s) que está(ão) sendo mesclado(s) no seu ramo quando você executar o
git merge
.REBASE_HEAD
durante um rebase, registra o commit onde a operação está interrompida no momento, seja por causa de conflitos ou de um comando
edit
num rebase interativo.REVERT_HEAD
registra o commit que está sendo revertido quando você executa o
git revert
.CHERRY_PICK_HEAD
registra o commit que você está selecionando quando executa o
git cherry-pick
.BISECT_HEAD
registra o commit atual a ser testado quando você executa
git bisect --no-checkout
.AUTO_MERGE
registra um objeto da árvore correspondente ao estado da estratégia de mesclagem ort gravada na árvore de trabalho quando uma operação de mesclagem resultar em conflitos.
Note that any of the refs/* cases above may come either from the
$GIT_DIR/refs
directory or from the$GIT_DIR/packed-refs
file. While the ref name encoding is unspecified, UTF-8 is preferred as some output processing may assume ref names in UTF-8.- @
O @ sozinho é um atalho para
HEAD
.- [<refname>]@{<data>}, exemplo. master@{yesterday}, HEAD@{5 minutos atrás}
A ref followed by the suffix @ with a date specification enclosed in a brace pair (e.g. {yesterday}, {1 month 2 weeks 3 days 1 hour 1 second ago} or {1979-02-26 18:30:00}) specifies the value of the ref at a prior point in time. This suffix may only be used immediately following a ref name and the ref must have an existing log ($GIT_DIR/logs/<ref>). Note that this looks up the state of your local ref at a given time; e.g., what was in your local master branch last week. If you want to look at commits made during certain times, see
--since
and--until
.- <refname>@{<n>}, e.g. master@{1}
A ref followed by the suffix @ with an ordinal specification enclosed in a brace pair (e.g. {1}, {15}) specifies the n-th prior value of that ref. For example master@{1} is the immediate prior value of master while master@{5} is the 5th prior value of master. This suffix may only be used immediately following a ref name and the ref must have an existing log ($GIT_DIR/logs/<refname>).
- @{<n>}, exemplo. @{1}
Você pode usar a construção @ com um
ref
vazio para obter uma entradareflog
do ramo atual. Por exemplo, caso esteja no ramo blabla então @{1} significa o mesmo que blabla@{1}.- @{-<n>}, exemplo, @{-1}
O construtor @{-<n>} significa que <n> do ramo/commit foi verificado antes da atual.
- [<nome-do-ramo>]@{upstream}, exemplo, master@{upstream}, @{u}
Um ramo B pode ser configurado para construir em cima de um ramo X (configurado com
branch.<nome>.merge
) em um R remoto (configurado combranch.<nome>.remote
). B@{u} refere-se ao ramo rastreado remotamente para o ramo X obtido a partir do R remoto, normalmente encontrado emrefs/remotes/R/X
.- [<nome-do-ramo>]@{push}, exemplo, master@{push}, @{push}
O sufixo @{push} relata ao ramo "para onde estaremos fazendo impulsionamento" caso
git push
seja executado enquantobranchname
seja verificado (ou oHEAD
atual, caso nenhum nome do ramo tenha sido especificado). Como é para @{upstream}, reportamos o ramo rastreado remotamente que corresponda aquela ramificação remotamente.Aqui um exemplo para deixar mais claro:
$ git config push.default current $ git config remote.pushdefault myfork $ git switch -c mybranch origin/master $ git rev-parse --symbolic-full-name @{upstream} refs/remotes/origin/master $ git rev-parse --symbolic-full-name @{push} refs/remotes/myfork/mybranch
Observe no exemplo que configuramos um fluxo de trabalho triangular, onde fazemos o
pull
(obtenção) de um local e opush
(impulsionamento) para outro. Em um fluxo de trabalho não triangular, o @{push} é igual como o @{upstream} que não é necessário.Esse sufixo também é aceito quando escrito em maiúsculas e significa a mesma coisa, não importa o caso.
- <rev>^[<n>], exemplo, HEAD^, v1.5.1^0
A suffix ^ to a revision parameter means the first parent of that commit object. ^<n> means the <n>th parent (i.e. <rev>^ is equivalent to <rev>^1). As a special rule, <rev>^0 means the commit itself and is used when <rev> is the object name of a tag object that refers to a commit object.
- <rev>~[<n>], exemplo, HEAD~, master~3
A suffix ~ to a revision parameter means the first parent of that commit object. A suffix ~<n> to a revision parameter means the commit object that is the <n>th generation ancestor of the named commit object, following only the first parents. I.e. <rev>~3 is equivalent to <rev>^^^ which is equivalent to <rev>^1^1^1. See below for an illustration of the usage of this form.
- <rev>^{<type>}, exemplo, v0.99.8^{commit}
A suffix ^ followed by an object type name enclosed in brace pair means dereference the object at <rev> recursively until an object of type <type> is found or the object cannot be dereferenced anymore (in which case, barf). For example, if <rev> is a commit-ish, <rev>^{commit} describes the corresponding commit object. Similarly, if <rev> is a tree-ish, <rev>^{tree} describes the corresponding tree object. <rev>^0 is a short-hand for <rev>^{commit}.
<rev>^{object} pode ser utilizado para ter certeza que os nomes <rev> de um determinado objeto existam, sem requerer que <rev> seja uma tag e sem perder a referência com <rev>; pois
tag
já é um objeto, não a necessidade que seja perdido a referência nenhuma vez para chegar a um objeto.<rev>^{tag} pode ser utilizado para ter certeza que <rev> identifique um objeto
tag
já existente.- <rev>^{}, exemplo, v0.99.8^{}
Um sufixo ^ seguido por um par de chaves vazias significa que o objeto pode ser uma tag e perder a referência de uma tag recursivamente, até que um objeto que não seja tag, seja encontrada.
- <rev>^{/<texto>}, exemplo, HEAD^{/fix nasty bug}
Um sufixo ^ para um parâmetro de revisão, seguido por um par de chaves que contém um texto liderado por uma barra, é o mesmo que a sintaxe :/fix nasty bug abaixo, exceto que ele retorna o commit coincidente mais jovem que é acessível a partir de <rev> antes de ^.
- :/<texto>, exemplo, :/fix nasty bug
A colon, followed by a slash, followed by a text, names a commit whose commit message matches the specified regular expression. This name returns the youngest matching commit which is reachable from any ref, including HEAD. The regular expression can match any part of the commit message. To match messages starting with a string, one can use e.g. :/^foo. The special sequence :/! is reserved for modifiers to what is matched. :/!-foo performs a negative match, while :/!!foo matches a literal ! character, followed by foo. Any other sequence beginning with :/! is reserved for now. Depending on the given text, the shell’s word splitting rules might require additional quoting.
- <rev>:<caminho>, exemplo, HEAD:README, master:./README
A suffix : followed by a path names the blob or tree at the given path in the tree-ish object named by the part before the colon. A path starting with ./ or ../ is relative to the current working directory. The given path will be converted to be relative to the working tree’s root directory. This is most useful to address a blob or tree from a commit or tree that has the same tree structure as the working tree.
- :[<n>:]<caminho>, exemplo, :0:README, :README
Os dois pontos opcionalmente seguidos por um número de estágio (0 para 3) e dois pontos, seguidos por um caminho, informam um objeto bolha no índice no caminho especificado. Nomeia uma entrada de estágio quando o número estiver ausente (assim como dois pontos que o seguem). Durante uma mesclagem, o estágio 1 é o ancestral comum, o estágio 2 é a versão do ramo de destino (normalmente o ramo atual) e o estágio 3 é a versão do ramo que está sendo mesclado.
Here is an illustration, by Jon Loeliger. Both commit nodes B and C are parents of commit node A. Parent commits are ordered left-to-right.
G H I J \ / \ / D E F \ | / \ \ | / | \|/ | B C \ / \ / A
A = = A^0 B = A^ = A^1 = A~1 C = = A^2 D = A^^ = A^1^1 = A~2 E = B^2 = A^^2 F = B^3 = A^^3 G = A^^^ = A^1^1^1 = A~3 H = D^2 = B^^2 = A^^^2 = A~2^2 I = F^ = B^3^ = A^^3^ J = F^2 = B^3^2 = A^^3^2
DEFININDO OS INTERVALOS
O histórico que atravessa os comandos como o git log
opera em um determinado conjunto de commits e não apenas em único commit.
Para estes comandos, defina uma única revisão utilizando a notação descrita na seção anterior, significa que o conjunto dos commits acessíveis
a partir do commit informado.
Ao especificar várias revisões significa que o conjunto dos commits acessíveis a partir de qualquer um dos commits informados.
O conjunto acessível de um commit é o próprio commit e o commit em sua cadeia de ancestrais.
Existem várias notações para definir um conjunto de commits associados (chamado de "intervalo de revisão"), ilustrado abaixo.
Notações do Intervalo Pontilhado
- A faixa de notação de intervalo .. (dois pontos)
The ^r1 r2 set operation appears so often that there is a shorthand for it. When you have two commits r1 and r2 (named according to the syntax explained in SPECIFYING REVISIONS above), you can ask for commits that are reachable from r2 excluding those that are reachable from r1 by ^r1 r2 and it can be written as r1..r2.
- A notação da diferença simétrica ... (três pontos)
A similar notation r1...r2 is called symmetric difference of r1 and r2 and is defined as r1 r2 --not $(git merge-base --all r1 r2). It is the set of commits that are reachable from either one of r1 (left side) or r2 (right side) but not from both.
In these two shorthand notations, you can omit one end and let it default to HEAD. For example, origin.. is a shorthand for origin..HEAD and asks "What did I do since I forked from the origin branch?" Similarly, ..origin is a shorthand for HEAD..origin and asks "What did the origin do since I forked from them?" Note that .. would mean HEAD..HEAD which is an empty range that is both reachable and unreachable from HEAD.
Commands that are specifically designed to take two distinct ranges (e.g. "git range-diff R1 R2" to compare two ranges) do exist, but they are exceptions. Unless otherwise noted, all "git" commands that operate on a set of commits work on a single revision range. In other words, writing two "two-dot range notation" next to each other, e.g.
$ git log A..B C..D
does not specify two revision ranges for most commands. Instead it will name a single connected set of commits, i.e. those that are reachable from either B or D but are reachable from neither A or C. In a linear history like this:
---A---B---o---o---C---D
porque A e B são alcançáveis a partir de C, o intervalo da faixa de revisão definido por estes dois intervalos pontilhados é um único commit D.
Outras <rev>^ Notações Abreviadas dos pais
Existem três outras abreviações, particularmente úteis para a mesclagem dos commits, para nomear um conjunto formado por um commit e o seu pai principal.
A notação r1^@ todos os pais do r1.
The r1^! notation includes commit r1 but excludes all of its parents. By itself, this notation denotes the single commit r1.
A notação <rev>^-[<n>] incluí <rev> porém excluí o <n>ésimo pai (ou seja, é uma abreviação para <rev>^<n>..<rev>), com <n> = 1 caso não seja informado. Geralmente é útil para a mesclagem dos commits onde é possível passar <commit>^- para obter todos os commits do ramoq que foi mesclado na mesclagem do commit <commit> (incluindo o próprio <commit>).
Embora <rev>^<n> fosse sobre a especificação do pai de um único commit, estas três notações também consideram os seus pais. Como por exemplo, você pode dizer HEAD^2^@, contudo não poderá dizer HEAD^@^2.
Resumo do Intervalo da Revisão
- <rev>
Inclua os commits que são acessíveis através do <ref> (ou seja, <rev> e seus ancestrais).
- ^<rev>
Exclua os commits que estejam acessíveis a partir de
<rev>
(<rev> e os seus ancestrais por exemplo).- <rev1>..<rev2>
Include commits that are reachable from <rev2> but exclude those that are reachable from <rev1>. When either <rev1> or <rev2> is omitted, it defaults to
HEAD
.- <rev1>...<rev2>
Include commits that are reachable from either <rev1> or <rev2> but exclude those that are reachable from both. When either <rev1> or <rev2> is omitted, it defaults to
HEAD
.- <rev>^@, e.g. HEAD^@
Um sufixo ^ seguido por um sinal de arroba é o mesmo que listar todas as origens de <rev> (ou seja, incluir qualquer coisa acessível das suas origens, mas não o próprio commit).
- <rev>^!, e.g. HEAD^!
Um sufixo ^ seguido de um ponto de exclamação é o mesmo que fazer um commit <rev> e todos os seus principais prefixam com ^ para excluí-los (assim como seus ancestrais).
- <rev>^-<n>, e.g. HEAD^-, HEAD^-2
É o equivalente a <rev>^<n>..<rev>, with <n> = 1 caso nenhum seja informado.
Aqui estão alguns exemplos utilizando a ilustração Loeliger acima, com cada etapa da expansão e da seleção da notação cuidadosamente explicitada:
Args Expanded arguments Selected commits D G H D D F G H I J D F ^G D H D ^D B E I J F B ^D B C E I J F B C C I J F C B..C = ^B C C B...C = B ^F C G H D E B C B^- = B^..B = ^B^1 B E I J F B C^@ = C^1 = F I J F B^@ = B^1 B^2 B^3 = D E F D G H E F I J C^! = C ^C^@ = C ^C^1 = C ^F C B^! = B ^B^@ = B ^B^1 ^B^2 ^B^3 = B ^D ^E ^F B F^! D = F ^I ^J D G H D F
PARSEOPT
No modo --parseopt
, o comando git rev-parse ajuda no processamento das opções trazendo aos scripts shell as mesmas facilidades integradas que o C possuí. Funciona como um normalizador das opções (por exemplo, divide trocas únicas com valores agregados), quase como o que o getopt(1)
faz.
It takes on the standard input the specification of the options to parse and understand, and echoes on the standard output a string suitable for sh(1)
eval
to replace the arguments with normalized ones. In case of error, it outputs usage on the standard error stream, and exits with code 129.
Note: Make sure you quote the result when passing it to eval
. See below for an example.
Formato de Entrada
git rev-parse --parseopt input format is fully text based. It has two parts, separated by a line that contains only --
. The lines before the separator (should be one or more) are used for the usage. The lines after the separator describe the options.
As opções de cada linha possui este formato:
<opt-spec><flags>*<arg-hint>? SP+ help LF
<opt-spec>
its format is the short option character, then the long option name separated by a comma. Both parts are not required, though at least one is necessary. May not contain any of the
<flags>
characters.h,help
,dry-run
andf
are examples of correct<opt-spec>
.<flags>
<flags>
são do*
,=
,?
ou!
.Utilize
=
caso a opção receba um argumento.Utilize
?
para dar sentido que a opção aceita um argumento opcional. Você provavelmente quer utilzar o modo--stuck-long
para poder analisar de forma inequívoca o argumento opcional.Utilize
*
para indicar que esta opção não deve ser listada no uso gerado para a opção-h
. É exibido para--help-all
conforme documentado em gitcli[7].Utilize
!
para não fazer com que a opção longa que foi negada esteja disponível.
<arg-hint>
<arg-hint>
, if specified, is used as a name of the argument in the help output, for options that take arguments.<arg-hint>
is terminated by the first whitespace. It is customary to use a dash to separate words in a multi-word argument hint.
O restante da linha, depois dos espaços removidos, é usado como ajuda associada à opção.
As linhas em branco são ignoradas e as linhas que não coincidam com esta especificação são utilizadas como cabeçalhos dos grupos das opções (inicie a linha com um espaço para criar essas linhas de propósito).
Exemplo
OPTS_SPEC="\ algum-comando [<opções>] <args>... algum-comando faz 'foo' e 'bar'! -- h,help! show the help foo some nifty option --foo bar= some cool option --bar with an argument baz=arg another cool option --baz with a named argument qux?path qux may take a path argument but has meaning by itself Um cabeçalho do grupo de opções C? opção 'C' com um argumento opcional" eval "$(echo "$OPTS_SPEC" | git rev-parse --parseopt -- "$@" || echo exit $?)"
Texto de uso
Quando "$@"
is -h
ou --help
no exemplo acima, o seguinte texto de utilização será exibido:
utilização: algum-comando [<opções>] <args>... algum-comando faz 'foo' e 'bar'! -h, --help exibe a ajuda --[no-]foo alguma opção bacana --foo --[no-]bar ... alguma opção legal --bar com um argumento --[no-]baz <arg> outra opção legal --baz com um determinado argumento --[no-]qux[=<caminho>] o qux pode utilizar um argumento para o caminho mas significa ele mesmo Um cabeçalho do grupo de opções -C[...] opção C com um argumento opcional
SQ-QUOTE
No modo --sq-quote
, o comando git rev-parse ecoa na saída padrão uma única linha adequada para sh (1)
eval
. Esta linha é feita normalizando os argumentos após a opção --sq-quote
. Nada mais é feito além de citar os argumentos.
Caso queira que o comando de entrada ainda seja interpretada como de costume pelo comando git rev-parse
antes da saída ser citada pela shell, consulte a opção --sq
.
EXEMPLOS
Imprima o nome do objeto do commit atual:
$ git rev-parse --verify HEAD
Imprima o nome do objeto do commit a partir da revisão na variável shell $REV:
$ git rev-parse --verify --end-of-options $REV^{commit}
Isso causará um erro caso $REV esteja vazio ou não seja uma revisão válida.
Semelhante ao acima:
$ git rev-parse --default master --verify --end-of-options $REV
porém caso $REV esteja vazia, o nome do objeto do commit vindo do "master" será impresso.
GIT
Parte do conjunto git[1]