Путеводитель по Руководству Linux

  User  |  Syst  |  Libr  |  Device  |  Files  |  Other  |  Admin  |  Head  |



   git-checkout    ( 1 )

смена ветвей или восстановление файлов рабочего дерева (Switch branches or restore working tree files)

Примеры (Examples)

1. The following sequence checks out the master branch, reverts
           the Makefile to two revisions back, deletes hello.c by
           mistake, and gets it back from the index.

$ git checkout master (1) $ git checkout master~2 Makefile (2) $ rm -f hello.c $ git checkout hello.c (3)

1. switch branch 2. take a file out of another commit 3. restore hello.c from the index

If you want to check out all C source files out of the index, you can say

$ git checkout -- '*.c'

Note the quotes around *.c. The file hello.c will also be checked out, even though it is no longer in the working tree, because the file globbing is used to match entries in the index (not in the working tree by the shell).

If you have an unfortunate branch that is named hello.c, this step would be confused as an instruction to switch to that branch. You should instead write:

$ git checkout -- hello.c

2. After working in the wrong branch, switching to the correct branch would be done using:

$ git checkout mytopic

However, your "wrong" branch and correct mytopic branch may differ in files that you have modified locally, in which case the above checkout would fail like this:

$ git checkout mytopic error: You have local changes to 'frotz'; not switching branches.

You can give the -m flag to the command, which would try a three-way merge:

$ git checkout -m mytopic Auto-merging frotz

After this three-way merge, the local modifications are not registered in your index file, so git diff would show you what changes you made since the tip of the new branch.

3. When a merge conflict happens during switching branches with the -m option, you would see something like this:

$ git checkout -m mytopic Auto-merging frotz ERROR: Merge conflict in frotz fatal: merge program failed

At this point, git diff shows the changes cleanly merged as in the previous example, as well as the changes in the conflicted files. Edit and resolve the conflict and mark it resolved with git add as usual:

$ edit frotz $ git add frotz