Recherche…


Remarques

De nombreuses commandes Git prennent les paramètres de révision comme arguments. Selon la commande, ils désignent un commit spécifique ou, pour les commandes qui parcourent le graphe de révision (comme git-log (1) ), tous les commits pouvant être atteints à partir de ce commit. Ils sont généralement appelés <commit> ou <rev> ou <revision> dans la description de la syntaxe.

La documentation de référence pour la syntaxe des révisions Git est la page de manuel gitrevisions (7) .

Toujours absent de cette page:

  • [_] La sortie de git describe , par exemple v1.7.4.2-679-g3bee7fb
  • [_] @ seul comme raccourci pour HEAD
  • [_] @{-<n>} , par exemple @{-1} , et - signifiant @{-1}
  • [_] <branchname>@{push}
  • [_] <rev>^@ , pour tous les parents de <rev>

Nécessite une documentation séparée:

  • [_] Référence aux blobs et aux arborescences dans le référentiel et dans l'index: <rev>:<path> et :<n>:<path> syntaxe :<n>:<path>
  • [_] Les plages de révision comme A..B , A...B , B ^A , A^1 et la limitation de révision comme -<n> , --since

Spécification de la révision par nom d'objet

$ git show dae86e1950b1277e545cee180551750029cfe735
$ git show dae86e19

Vous pouvez spécifier la révision (ou en réalité tout objet: tag, arborescence, contenu du répertoire, blob, c'est-à-dire le contenu du fichier) en utilisant le nom d'objet SHA-1, soit une chaîne hexadécimale de 40 octets, soit une sous-chaîne unique.

Noms de référence symboliques: branches, tags, branches de suivi à distance

$ 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'

Vous pouvez spécifier une révision en utilisant un nom de référence symbolique, qui inclut des branches (par exemple, «master», «next», «maint»), des balises (par exemple, «v1.0», «v0.6.3-rc2»), remote- suivi des branches (par exemple «origine», «origine / maître») et références spéciales telles que «HEAD» pour la branche actuelle.

Si le nom de référence symbolique est ambigu, par exemple si vous avez à la fois une branche et une balise nommée 'fix' (il est déconseillé d’avoir une branche et une balise du même nom), vous devez spécifier le type de référence que vous voulez utiliser:

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

La révision par défaut: HEAD

$ git show         # equivalent to 'git show HEAD'

'HEAD' nomme le commit sur lequel vous avez basé les modifications dans l’arborescence de travail et est généralement le nom symbolique de la branche en cours. Beaucoup (mais pas toutes) de commandes qui prennent le paramètre de révision par défaut à 'HEAD' s'il est manquant.

Références 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

Une ref, généralement une branche ou HEAD, suivie du suffixe @ avec une spécification ordinale incluse dans une paire d'accolades (par exemple {1} , {15} ) spécifie la n-ième valeur antérieure de cette référence dans votre référentiel local . Vous pouvez vérifier les entrées de reflog récentes avec la commande git reflog , ou l' --walk-reflogs / -g pour 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

Remarque : l'utilisation de reflogs a pratiquement remplacé les anciens mécanismes d'utilisation de la référence ORIG_HEAD (à peu près équivalente à HEAD@{1} ).

Références de reflog: @ { }

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

Une ref suivie du suffixe @ avec une spécification de date dans une accolade (par exemple {yesterday} , {1 month 2 weeks 3 days 1 hour 1 second ago} ou {1979-02-26 18:30:00} ) spécifie la valeur de la référence à un moment antérieur (ou le point le plus proche). Notez que cela recherche l'état de votre ref local à un moment donné; Par exemple, ce qui était dans votre branche locale «maître» la semaine dernière.

Vous pouvez utiliser git reflog avec un spécificateur de date pour rechercher l'heure exacte à laquelle vous avez fait quelque chose dans le référentiel 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

Branche suivie / en amont: @{en amont}

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

Le suffixe @{upstream} ajouté à un nom de branche (forme <branchname>@{u} ) fait référence à la branche sur laquelle la branche spécifiée par branchname est configurée (configurée avec branch.<name>.remote et branch.<name>.merge ou avec git branch --set-upstream-to=<branch> ). Un nom de branche manquant est celui par défaut.

Avec la syntaxe des plages de révision, il est très utile de voir les validations de votre branche en amont (validations dans votre référentiel local non encore présent en amont) et ce que vous êtes en retard (validation en amont non fusionnée dans une branche locale) ou tous les deux:

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

Commit la chaîne d'ascendance: ^, ~ , etc.

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

Un suffixe ^ à un paramètre de révision signifie le premier parent de cet objet de validation. ^<n> signifie le <n> -ième parent (c.-à-d. que <rev>^ est équivalent à <rev>^1 ).

Un suffixe ~<n> à un paramètre de révision signifie l'objet de validation qui est l'ancêtre <n> de génération de l'objet de validation nommé, en suivant uniquement les premiers parents. Cela signifie que, par exemple, <rev>~3 équivaut à <rev>^^^ . Comme raccourci, <rev>~ signifie <rev>~1 , et équivaut à <rev>^1 , ou <rev>^ en bref.

Cette syntaxe est composable.


Pour trouver ces noms symboliques, vous pouvez utiliser la commande git name-rev :

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

Notez que --pretty=oneline et non --oneline doit être utilisé dans l'exemple suivant

$ 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

Déréférencement des branches et des tags: ^ 0, ^ { }

Dans certains cas, le comportement d'une commande dépend de son nom, de son nom ou d'une révision arbitraire. Vous pouvez utiliser la syntaxe de "dé-référencement" si vous en avez besoin.

Un suffixe ^ suivi d'un nom de type d'objet ( tag , commit , tree , blob ) placé entre accolades (par exemple, v0.99.8^{commit} ) signifie déréférencer l'objet à <rev> manière récursive jusqu'à ce qu'un objet de type <type> est trouvé ou l'objet ne peut plus être déréférencé. <rev>^0 est un raccourci pour <rev>^{commit} .

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

Un suffixe ^ suivi d'une paire d'accolades vide (par exemple, v0.99.8^{} ) signifie déréférencer la balise récursivement jusqu'à ce qu'un objet non-balise soit trouvé.

Comparer

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

avec

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

Plus jeune engagement correspondant: ^ {/ },: /

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

Un deux-points (' : '), suivi d'une barre oblique (' / '), suivi d'un texte, nomme un commit dont le message de validation correspond à l'expression régulière spécifiée. Ce nom retourne le commit le plus jeune correspondant qui est accessible depuis n'importe quelle référence. L'expression régulière peut correspondre à n'importe quelle partie du message de validation. Pour faire correspondre les messages commençant par une chaîne, on peut utiliser par exemple :/^foo . La séquence spéciale :/! est réservé aux modificateurs à ce qui est apparié. :/!-foo effectue une correspondance négative, alors que :/!!foo correspond à un littéral! personnage, suivi de foo .

Un suffixe ^ à un paramètre de révision, suivi d'une paire d'accolades contenant un texte dirigé par une barre oblique, est identique à la syntaxe :/<text> ci-dessous: il retourne la validation la plus récente accessible depuis la <rev> avant ^ .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow