Buscar..


Observaciones

Muchos comandos de Git toman parámetros de revisión como argumentos. Dependiendo del comando, denotan un compromiso específico o, para los comandos que recorren el gráfico de revisión (como git-log (1) ), todos los compromisos que pueden alcanzarse desde ese compromiso. Por lo general, se indican como <commit> , o <rev> , o <revision> en la descripción de la sintaxis.

La documentación de referencia para la sintaxis de las revisiones de Git es la página de manual de gitrevisions (7) .

Todavía falta en esta página:

  • [_] La salida de git describe , por ejemplo, v1.7.4.2-679-g3bee7fb
  • [_] @ solo como atajo para HEAD
  • [_] @{-<n>} , por ejemplo, @{-1} , y - significa @{-1}
  • [_] <branchname>@{push}
  • [_] <rev>^@ , para todos los padres de <rev>

Necesita documentación separada:

  • [_] Haciendo referencia a manchas y árboles en el repositorio y en el índice: <rev>:<path> y :<n>:<path> sintaxis :<n>:<path>
  • [_] Rangos de revisión como A..B , A...B , B ^A , A^1 y limitación de revisión como -<n> , --since

Especificando revisión por nombre de objeto

$ git show dae86e1950b1277e545cee180551750029cfe735
$ git show dae86e19

Puede especificar la revisión (o en verdad cualquier objeto: etiqueta, árbol, es decir, contenido del directorio, blob, es decir, contenido del archivo) usando el nombre de objeto SHA-1, ya sea una cadena hexadecimal completa de 40 bytes, o una subcadena que sea única para el repositorio.

Nombres de referencia simbólicos: ramas, etiquetas, ramas de seguimiento remoto

$ git log master    # specify branch
$ git show v1.0     # specify tag
$ git show HEAD     # specify current branch
$ git show origin   # specify default remote-tracking branch for remote 'origin'

Puede especificar la revisión utilizando un nombre de referencia simbólico, que incluye ramas (por ejemplo, 'master', 'next', 'maint'), etiquetas (por ejemplo, 'v1.0', 'v0.6.3-rc2'), remote- Rastreo de sucursales (por ejemplo, 'origen', 'origen / maestro') y referencias especiales como 'HEAD' para la sucursal actual.

Si el nombre de referencia simbólico es ambiguo, por ejemplo, si tiene una rama y una etiqueta con el nombre 'corregir' (no se recomienda tener una rama y una etiqueta con el mismo nombre), debe especificar el tipo de referencia que desea usar:

$ git show heads/fix      # or 'refs/heads/fix', to specify branch
$ git show tags/fix       # or 'refs/tags/fix', to specify tag

La revisión por defecto: HEAD

$ git show         # equivalent to 'git show HEAD'

'HEAD' nombra la confirmación en la que basó los cambios en el árbol de trabajo, y generalmente es el nombre simbólico de la rama actual. Muchos de los comandos (pero no todos) que toman el parámetro de revisión de forma predeterminada son 'HEAD' si falta.

Referencias de Reflog: @ { }

$ git show @{1}            # uses reflog for current branch
$ git show master@{1}      # uses reflog for branch 'master'
$ git show HEAD@{1}        # uses 'HEAD' reflog

Una referencia, generalmente una rama o HEAD, seguida por el sufijo @ con una especificación ordinal incluida en un par de llaves (por ejemplo, {1} , {15} ) especifica el n-ésimo valor anterior de esa referencia en su repositorio local . Puede verificar las entradas recientes de reflog con el comando git reflog , o la --walk-reflogs / -g para git log .

$ git reflog
08bb350 HEAD@{0}: reset: moving to HEAD^
4ebf58d HEAD@{1}: commit: gitweb(1): Document query parameters
08bb350 HEAD@{2}: pull: Fast-forward
f34be46 HEAD@{3}: checkout: moving from af40944bda352190f05d22b7cb8fe88beb17f3a7 to master
af40944 HEAD@{4}: checkout: moving from master to v2.6.3

$ git reflog gitweb-docs
4ebf58d gitweb-docs@{0}: branch: Created from master

Nota : el uso de reflogs prácticamente reemplazó el mecanismo anterior de utilización de ORIG_HEAD ref (aproximadamente equivalente a HEAD@{1} ).

Referencias de Reflog: @ { }

$ git show master@{yesterday}
$ git show HEAD@{5 minutes ago}   # or HEAD@{5.minutes.ago}

Una referencia seguida por el sufijo @ con una especificación de fecha incluida en un par de corchetes (por ejemplo, {yesterday} , {1 month 2 weeks 3 days 1 hour 1 second ago} o {1979-02-26 18:30:00} ) especifica el valor de la referencia en un punto anterior en el tiempo (o el punto más cercano a él). Tenga en cuenta que esto busca el estado de su referencia local en un momento dado; por ejemplo, lo que había en su sucursal 'maestra' local la semana pasada.

Puede usar git reflog con un especificador de fecha para buscar la hora exacta en la que hizo algo para dar una referencia en el repositorio local.

$ git reflog HEAD@{now}
08bb350 HEAD@{Sat Jul 23 19:48:13 2016 +0200}: reset: moving to HEAD^
4ebf58d HEAD@{Sat Jul 23 19:39:20 2016 +0200}: commit: gitweb(1): Document query parameters
08bb350 HEAD@{Sat Jul 23 19:26:43 2016 +0200}: pull: Fast-forward

Rama rastreada / ascendente: @{río arriba}

$ git log @{upstream}..       # what was done locally and not yet published, current branch
$ git show master@{upstream}  # show upstream of branch 'master'

El sufijo @{upstream} agregado a un nombre de rama (forma corta <branchname>@{u} ) se refiere a la rama que la rama especificada por nombre de rama está configurada para construir encima de (configurada con branch.<name>.remote y branch.<name>.merge , o con git branch --set-upstream-to=<branch> ). Un nombre de sucursal faltante por defecto es el actual.

Junto con la sintaxis para los rangos de revisión, es muy útil ver las confirmaciones que su sucursal está adelantada en sentido ascendente (las confirmaciones en su repositorio local aún no están presentes en sentido ascendente), y qué confirmaciones está detrás (las confirmaciones ascendentes no se fusionaron en la sucursal local), o ambos:

$ git log --oneline @{u}..
$ git log --oneline ..@{u}
$ git log --oneline --left-right @{u}...  # same as ...@{u}

Cometer cadena de ascendencia: ^, ~ , etc.

$ git reset --hard HEAD^             # discard last commit
$ git rebase --interactive HEAD~5    # rebase last 4 commits

Un sufijo ^ a un parámetro de revisión significa el primer padre de ese objeto de confirmación. ^<n> significa que el <n> -th padre (es decir, <rev>^ es equivalente a <rev>^1 ).

Un sufijo ~<n> a un parámetro de revisión significa el objeto de confirmación que es el antecesor <n> -thththththender del objeto de confirmación nombrado, siguiendo solo a los primeros padres. Esto significa que, por ejemplo, <rev>~3 es equivalente a <rev>^^^ . Como acceso directo, <rev>~ significa <rev>~1 , y es equivalente a <rev>^1 , o <rev>^ en pocas palabras.

Esta sintaxis es composable.


Para encontrar dichos nombres simbólicos puede usar el comando git name-rev :

$ git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99~940

Tenga en cuenta que --pretty=oneline y no --oneline debe usar en el siguiente ejemplo

$ git log --pretty=oneline | git name-rev --stdin --name-only
master Sixth batch of topics for 2.10
master~1 Merge branch 'ls/p4-tmp-refs'
master~2 Merge branch 'js/am-call-theirs-theirs-in-fallback-3way'
[...]
master~14^2 sideband.c: small optimization of strbuf usage
master~16^2 connect: read $GIT_SSH_COMMAND from config file
[...]
master~22^2~1 t7810-grep.sh: fix a whitespace inconsistency
master~22^2~2 t7810-grep.sh: fix duplicated test name

Desreferenciación de ramas y etiquetas: ^ 0, ^ { }

En algunos casos, el comportamiento de un comando depende de si se le asigna un nombre de rama, nombre de etiqueta o una revisión arbitraria. Puede utilizar la sintaxis "de-referencia" si necesita este último.

Un sufijo ^ seguido de un nombre de tipo de objeto ( tag , commit , tree , blob ) encerrado entre par de v0.99.8^{commit} (por ejemplo v0.99.8^{commit} ) significa desreferenciar el objeto en <rev> recursivamente hasta que un objeto de tipo <type> se encuentra o el objeto no puede ser referenciado más. <rev>^0 es una mano corta para <rev>^{commit} .

$ git checkout HEAD^0    # equivalent to 'git checkout --detach' in modern Git

Un sufijo ^ seguido de un par de v0.99.8^{} vacío (por ejemplo v0.99.8^{} ) significa desreferenciar la etiqueta de forma recursiva hasta que se encuentre un objeto sin etiqueta.

Comparar

$ git show v1.0
$ git cat-file -p v1.0
$ git replace --edit v1.0

con

$ git show v1.0^{}
$ git cat-file -p v1.0^{}
$ git replace --edit v1.0^{}

Compromiso más joven que coincida: ^ {/ },: /

$ git show HEAD^{/fix nasty bug}   # find starting from HEAD
$ git show ':/fix nasty bug'       # find starting from any branch

Un signo de dos puntos (' : '), seguido de una barra (' / '), seguido de un texto, nombra una confirmación cuyo mensaje de confirmación coincide con la expresión regular especificada. Este nombre devuelve el compromiso de coincidencia más joven al que se puede acceder desde cualquier referencia. La expresión regular puede coincidir con cualquier parte del mensaje de confirmación. Para hacer coincidir los mensajes que comienzan con una cadena, se puede usar, por ejemplo :/^foo . La secuencia especial :/! está reservado para los modificadores a lo que coincida. :/!-foo realiza una coincidencia negativa, mientras que :/!!foo coincide con un literal! personaje, seguido de foo .

Un sufijo ^ a un parámetro de revisión, seguido de un par de corchetes que contiene un texto dirigido por una barra inclinada, es el mismo que la siguiente sintaxis :/<text> que devuelve la confirmación de coincidencia más joven a la que se puede acceder desde <rev> antes ^ .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow