J'ai vu une réponse à une question ici qui aide à restaurer un fichier supprimé dans git.
La solution était
git checkout <deleting_commit>^ -- <deleted_file_path>
Que fait le caractère d'insertion ( ^
)? Je l'ai vu ailleurs faire des choses très utiles dans git. C'est magique. Quelqu'un, s'il vous plaît, gâche-le pour moi et dis-moi ce que ça fait?
^
) est le caractère d'échappement dans cmd.exe. Chaque fois que j'ai essayé de l'utiliser pour voir si cela serait utile, je ne passais rien, ce qui explique pourquoi les résultats n'ont jamais été différents. > _> Stupid cmd.exe. Vous pouvez y échapper en le doublant ou en le citant:git log master^^
ougit log "master^"
Réponses:
HEAD^
signifie le premier parent de la pointe de la branche courante.N'oubliez pas que les commits git peuvent avoir plus d'un parent.
HEAD^
est l'abréviation deHEAD^1
, et vous pouvez également adresserHEAD^2
et ainsi de suite si nécessaire .Vous pouvez contacter les parents de n'importe quel engagement, pas seulement
HEAD
. Vous pouvez également reculer de générations: par exemple, onmaster~2
entend le grand-parent de la pointe de la branche maître, privilégiant le premier parent en cas d'ambiguïté. Ces spécificateurs peuvent être enchaînées de façon arbitraire, par exemple ,topic~3^2
. Voir la réponse associée à Quelle est la différence entreHEAD^
etHEAD~
dans Git?Pour plus de détails, reportez-vous à la section «Spécification des révisions» de
git rev-parse --help
.la source
HEAD^^^
retourne-t-il le troisième commit plus ancien c'est-à-dire qu'il équivaut àHEAD~~~
?Cela signifie «parent de». Donc
HEAD^
signifie "le parent de la tête actuelle". Vous pouvez même les enchaîner:HEAD^^
signifie "le parent du parent du HEAD actuel" (c'est-à-dire le grand-parent du HEAD actuel),HEAD^^^
signifie "le parent du parent du parent du HEAD actuel", et ainsi de suite.la source
Le
^
(caret) peut également être utilisé lors de la spécification de plages .la source
Voici une explication visuelle. Supposons que vous ayez une histoire comme celle-ci:
Lorsque la fonctionnalité a été fusionnée dans maître, a
C
été créée avec deux ancêtres. Git attribue ces numéros d'ancêtres. L'ancêtre de la ligne principaleB
reçoit 1 et l'ancêtre de la fonctionF
2.Ainsi se
C^1
réfèreB
et seC^2
réfère àF
.C^
est un alias pourC^1
.Vous ne l'utiliseriez jamais
<rev>^3
. si vous aviez effectué une fusion de trois branches.la source
Le signe curseur fait référence au parent d'un commit particulier. Par exemple,
HEAD^
fait référence au parent de la validation HEAD actuelle. (fait égalementHEAD^^
référence au grand-parent).la source
Le carat représente un décalage de validation (parent). Ainsi, par exemple,
HEAD^
signifie "un commit de HEAD" etHEAD^^^
signifie "trois commits de HEAD".la source
Le (^) récupère la source parent de la commande, c'est-à-dire HEAD ^ obtiendra le parent de HEAD.
la source
Greg Bacon a donné un excellent lien, mais c'est assez dense. La documentation d'introduction de Git en ligne présente également des spécificateurs de révision et de plage:
https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection
la source