Copy files from the index to the working tree


Restore any files deleted since the last commit

$ git checkout-index --all

Restore any files deleted or changed since the last commit

$ git checkout-index --all --force

Restore any files changed since the last commit, ignoring any files that were deleted

$ git checkout-index --all --force --no-create

Export a copy of the entire tree at the last commit to the specified directory (the trailing slash is important)

$ git checkout-index --all --force --prefix=[path/to/export_directory/]


gitcheckout -index [ -u] [ -q] [ -a] [ -f] [ -n] [ --prefix=<string>] [ --stage=<number>|all] [ --temp] [ -z] [ --stdin] [ --] [<file> ...]


Will copy all files listed from the index to the working directory (not overwriting existing files) .


-u, --index update stat information for the checked out entries in the index file .

-q, --quiet be quiet if files exist or are not in the index

-f, --force forces overwrite of existing files

-a, --all checks out all files in the index . Cannot be used together with explicit filenames .

-n, --no -create Don checkout new files, only refresh files already checked out .

--prefix=<string> When creating files, prepend <string> (usually a directory including a trailing /)

--stage=<number>|all Instead of checking out unmerged entries, copy out the files from named stage . <number> must be between 1 and 3 . Note: --stage=all automatically implies --temp .

--temp Instead of copying the files to the working directory write the content to temporary files . The temporary name associations will be written to stdout .

--stdin Instead of taking list of paths from the command line, read list of paths from the standard input . Paths are separated by LF (i .e . one path per line) by default .

-z Only meaningful with --stdin ;paths are separated with NUL character instead of LF .

-- Do not interpret any more arguments as options .

The order of the flags used to matter, but not anymore .
Just doing gitcheckout -index does nothing . You probably meant gitcheckout -index -a . And if you want to force it, you want gitcheckout -index -f -a .
Intuitiveness is not the goal here . Repeatability is . The reason for the "no arguments means no work" behavior is that from scripts you are supposed to be able to do:
.RS 4
$ find . -name (Aq* .h (Aq -print0 | xargs -0 git checkout -index -f -- .RE

which will force all existing *.h files to be replaced with their cached copies . If an empty command line implied "all", then this would force -refresh everything in the index, which was not the point . But since gitcheckout -index accepts --stdin it would be faster to use:
.RS 4
$ find . -name (Aq* .h (Aq -print0 | git checkout -index -f -z --stdin .RE

The -- is just a good idea when you know the rest will be filenames; it will prevent problems with a filename of, for example, -a . Using -- is probably a good policy in scripts .

"USING &minus;&minus;TEMP OR &minus;&minus;STAGE=ALL"

When --temp is used (or implied by --stage=all ) gitcheckout -index will create a temporary file for each index entry being checked out . The index will not be updated with stat information . These options can be useful if the caller needs all stages of all unmerged entries so that the unmerged files can be processed by an external merge tool .
A listing will be written to stdout providing the association of temporary file names to tracked path names . The listing format has two variations:
'-04' 1. '+01' .sp -1

" 1." 4.2 tempname TAB path RS
The first format is what gets used when --stage is omitted or is not --stage=all . The field tempname is the temporary file name holding the file content and path is the tracked path name in the index . Only the requested entries are output .
'-04' 2. '+01' .sp -1

" 2." 4.2 stage1temp SP stage2temp SP stage3tmp TAB path RS
The second format is what gets used when --stage=all . The three stage temporary fields (stage1temp, stage2temp, stage3temp) list the name of the temporary file if there is a stage entry in the index or . if there is no stage entry . Paths which only have a stage 0 entry will always be omitted from the output .
In both formats RS (the record separator) is newline by default but will be the null byte if -z was passed on the command line . The temporary file names are always safe strings; they will never contain directory separators or whitespace characters . The path field is always relative to the current directory and the temporary file names are always relative to the top level directory .
If the object being copied out to a temporary file is a symbolic link the content of the link will be written to a normal file . It is up to the end -user or the Porcelain to make use of this information .


To update and refresh only the files already checked out

.RS 4
$ git checkout -index -n -f -a && git update -index --ignore -missing --refresh .RE

Using gitcheckout -index to "export an entire tree" The prefix ability basically makes it trivial to use gitcheckout -index as an "export as tree" function . Just read the desired tree into the index, and do:
.RS 4
$ git checkout -index --prefix=git -export -dir/ -a .RE
gitcheckout -index will "export" the index into the specified directory .
The final "/" is important . The exported name is literally just prefixed with the specified string . Contrast this with the following example .

Export files with a prefix
.RS 4
$ git checkout -index --prefix= .merged -Makefile .RE
This will check out the currently cached copy of Makefile into the file .merged -Makefile .


Part of the git (1)suite

Copied to clipboard
Stream 500+ movies for free and without signup