Vi uma resposta para uma pergunta aqui que ajuda a restaurar um arquivo excluído no git.
A solução foi
git checkout <deleting_commit>^ -- <deleted_file_path>
O que o caractere de sinal de intercalação ( ^
) faz? Eu já vi isso em outros lugares fazendo coisas muito úteis no git. Isso é mágico. Alguém, por favor, estrague tudo para mim e me diga o que faz?
^
) é o caractere de escape no cmd.exe. Toda vez que tentei usá-lo para ver se seria útil, na verdade não estava passando nada, o que explica por que os resultados nunca foram diferentes. > _> Cmd.exe estúpido. Você pode fugir dela, dobrando-o ou citá-la:git log master^^
ougit log "master^"
Respostas:
HEAD^
significa o primeiro pai da ponta do ramo atual.Lembre-se de que as confirmações do git podem ter mais de um pai.
HEAD^
é a abreviação deHEAD^1
, e você também pode abordarHEAD^2
e assim por diante, conforme apropriado.Você pode chegar aos pais de qualquer confirmação, não apenas
HEAD
. Você também pode voltar através de gerações: por exemplo,master~2
significa o avô da ponta do ramo principal, favorecendo o primeiro pai em casos de ambiguidade. Estes especificadores podem ser encadeadas arbitrariamente, por exemplo ,topic~3^2
. Veja a resposta relacionada a Qual é a diferença entreHEAD^
eHEAD~
no Git?Para obter detalhes completos, consulte a seção "Especificando revisões" em
git rev-parse --help
.fonte
HEAD^^^
retornar o terceiro commit mais antigo, ou seja, é equivalenteHEAD~~~
?Significa "pai de". Então
HEAD^
significa "o pai da atual HEAD". Você pode até encadeá-los:HEAD^^
significa "o pai do pai da atual HEAD" (ou seja, o avô da atual HEAD),HEAD^^^
significa "o pai do pai da mãe atual" e assim por diante.fonte
O
^
(sinal de intercalação) também pode ser usado ao especificar intervalos .fonte
Aqui está uma explicação visual. Suponha que você tenha uma história assim:
Quando o recurso foi mesclado no mestre,
C
foi criado com dois ancestrais. O Git atribui esses números de ancestrais. O ancestral da linha principalB
é atribuído 1 e o ancestral do recursoF
é atribuído 2.Assim
C^1
se refereB
eC^2
se refere aF
.C^
é um alias paraC^1
.Você só usaria
<rev>^3
. se você tivesse realizado uma mesclagem de três ramificações.fonte
O sinal de intercalação refere-se ao pai de uma confirmação específica. Por exemplo,
HEAD^
refere-se ao pai do atual commit HEAD. (também,HEAD^^
refere-se ao avô).fonte
O quilate representa um deslocamento de confirmação (pai). Por exemplo,
HEAD^
significa "um commit do HEAD" eHEAD^^^
significa "três commits do HEAD".fonte
O (^) obtém a fonte pai do comando, ie HEAD ^ obtém o pai de HEAD.
fonte
Greg Bacon deu um ótimo link, mas é bem denso. Os documentos introdutórios do Git on-line também apresentam especificadores de revisão e intervalo:
https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection
fonte