Git-шпаргалка

Написано 13 Январь, 2012 в категории Git

Это небольшая памятка по работе с git. На схеме показаны состояния, в которых может находится файл с точки зрения системы git. Что означает каждое состояние, как перейти в другое состояние и как вернуться обратно написано в пояснениях к схеме. Приятного чтения.

Переходы:

  1. Файл переходит из состояние untracked в состояние tracked indexed. Теперь git обратил внимание на наш файл и готов записать его в хранилище. tracked - git обратил внимание на файл, indexed - означает, что git готов записать файл в хранилище.

    git add <file>
    
  2. Иногда случаются в нашей жизни ошибки и нам хочется все вернуть назад. Точно также иногда попадают под контроль системы git, файлы, которые отслеживать не нужно. Это могут быть большие объемы пользовательских данных, личные настройки среды разработки, учетные данные от БД на машине разработчика и т.д. Если вы сделали переход №1, а потом передумали, то вы можете вывести этот файл из под контроля git с помощью команды:
    git rm --cached <file>
    

    при этом файл будет удален из поля зрения git, но физически останется на диске, т.е. перейдет из состояния tracked indexed в состояние untracked.

  3. Данные подготовлены, момент настал. Торжественно запишем наш файл в хранилище git командой:
    git commit -m "Текст комментария"
    

    В итоге все файлы, которые находились в состоянии tracked indexed будут сохранены в хранилище, т.е. перейдут в состояние fixed.

  4. Мы продолжаем работу над кодом, а значит изменяем его. Если изменить файл, который отслеживается системой git и находится в состоянии fixed, то git автоматически переведет этот файл в состояние tracked unindexed. unindexed - означает, что git хоть и видит что произошли изменения, но пока не готов их сохранить.
  5. Находясь в состоянии tracked unindexed мы можем либо сохранить изменения, либо отбросить их (например, если изменения оказались запутанными или предназначались для другого файла). Если все файлы которые находятся в состоянии tracked indexed и tracked unindexed должны быть записаны в хранилище, то git позволяет переместить их в хранилище одной командой
    git commit -a -m "Текст комментария"
    

    Git самостоятельно подготовит файлы для сохранения, т.е. переведет их из состояния tracked unindexed в tracked indexed и запишет изменения в хранилище.
    Если же последние изменения необходимо отбросить, то нужно выполнить команду

    git checkout -- <file>
    

    Все последние изменения файла будут потеряны, а файл перейдет в состояние fixed.

  6. В жизни обычно мы делаем кучу изменений, но эти изменения должны попасть в разные коммиты (сохранения). Для этого необходимые для сохранения файлы мы должны перевести из состояния tracked unindexed в tracked indexed и выполнить переход №3. Перевести файлы в готовое к сохранению состояние позволяет уже знакомая команда:
    git add <file>
    
  7. Тут снова возникает вопрос, мы сначала хотели сохранить файл A.php и файл B.php, а потом передумали. Теперь оба файла находятся в готовом к сохранению состоянии и надо один из них как-то перевести в состояние tracked unindexed. Для этого существует команда :
    git reset HEAD <file>
    
  8. Мы всегда можем вывести файл из под контроля системы git (причем это справедливо для состояний fixed, tracked unindexed и tracked indexed). Для этого необходимо выполнить уже знакомую команду:
    git rm --cached <file>
    

    но если наш файл хотя бы раз побывал в хранилище, то об удалении необходимо сообщить и хранилищу, командой:

    git commit -m "Перестали отслеживать изменения в <file>"
    

Напоследок. Под "file" имеется ввиду не только конкретный файл, например abc.php, но и группа файлов. Git позволяет описывать группу файлов, например так *.php. Удачи.

Полезные ссылки:
http://githowto.com
http://habrahabr.ru/post/60347/
http://git-scm.com/book/ru