tags:

views:

221

answers:

5

I saw an answer to a question here that helps restore a deleted file in git

The solution was

git checkout <deleting_commit>^ -- <deleted_file_path>

What does the caret character (^) do? I've seen it elsewhere doing very useful things in git. It's magical. Someone please spoil it for me and tell me what it does?

+4  A: 

The caret refers to the parent of a particular commit. E.g. HEAD^ refers to the parent of the current HEAD commmit. (also, HEAD^^ refers to the grandparent).

mopoke
+7  A: 

It means "parent of". So HEAD^ means "the parent of the current HEAD". You can even chain them together: HEAD^^ means "the parent of the parent of the current HEAD" (i.e., the grandparent of the current HEAD), HEAD^^^ means "the parent of the parent of the parent of the current HEAD", and so forth.

mipadi
+2  A: 

The carat represents a commit offset (parent). So for instance, HEAD^ means "one commit from HEAD" and HEAD^^^ means "three commits from HEAD".

Amber
+2  A: 

The (^) gets the parent source of the command i.e. HEAD^ will get the parent of HEAD.

TALLBOY
+5  A: 

HEAD^ means the first parent of the tip of the current branch.

Remember that git commits can have more than one parent. HEAD^ is short for HEAD^1, and you can also address HEAD^2 and so on as appropriate.

You can get to parents of any commit, not just HEAD. You can also move back through generations: for example, master~2 means the grandparent of the tip of the master branch, favoring the first parent in cases of ambiguity. These specifiers can be chained arbitrarily , e.g., topic~3^2.

For the full details, see the "Specifying Revisions" section of git rev-parse --help.

Greg Bacon