Показаны сообщения с ярлыком git commit. Показать все сообщения
Показаны сообщения с ярлыком git commit. Показать все сообщения

пятница, 13 февраля 2015 г.

Основы Git - Отмена изменений

Отмена изменений

На любой стадии может возникнуть необходимость что-либо отменить. Здесь мы рассмотрим несколько основных инструментов для отмены произведённых изменений. Будьте осторожны, ибо не всегда можно отменить сами отмены. Это одно из немногих мест в Git'е, где вы можете потерять свою работу если сделаете что-то неправильно.
Изменение последнего коммита

Одна из типичных отмен происходит тогда, когда вы делаете коммит слишком рано, забыв добавить какие-то файлы, или напутали с комментарием к коммиту. Если вам хотелось бы сделать этот коммит ещё раз, вы можете выполнить commit с опцией --amend:

$ git commit --amend

Эта команда берёт индекс и использует его для коммита. Если после последнего коммита не было никаких изменений (например, вы запустили приведённую команду сразу после предыдущего коммита), то состояние проекта будет абсолютно таким же и всё, что вы измените, это комментарий к коммиту.

Появится всё тот же редактор для комментариев к коммитам, но уже с введённым комментарием к последнему коммиту. Вы можете отредактировать это сообщение так же, как обычно, и оно перепишет предыдущее.

Например я сделал первый коммит файлика в Git и сразу же после этого решил поменять комментарий к нему. Мой первый комментарий был – “Первый коммит”, заменим его

U00001

Теперь изменим наш комментарий

U00002

Закрываем редактор

U00003

И видим что наш комментарий к коммиту был изменен.

Или для примера добавим к этому же последнему коммиту еще один файл. Я его создал и решил добавить к первому коммиту

U00004

Меняем наш коммент на другой

U00005

Вот и добавили все в тот же первый коммит еще один файл и поменяли комментарий к первому коммиту снова

U00006

Отмена индексации файла

Приведём пример. Допустим, вы внесли изменения в два файла и хотите записать их как два отдельных коммита, но случайно набрали git add . и проиндексировали оба файла. Как теперь отменить индексацию одного из двух файлов? Команда git status напомнит вам об этом:

U00007

Сразу после надписи “Changes to be committed”, написано использовать git reset HEAD <файл>... для исключения из индекса. Так что давайте последуем совету и отменим индексацию файла Test.txt:

U00008

Как видим файл Test.txt изменён, но снова не в индексе.

Отмена изменений файла

Что, если вы поняли, что не хотите оставлять изменения, внесённые в файл Test.txt? Как быстро отменить изменения, вернуть то состояние, в котором он находился во время последнего коммита (или первоначального клонирования, или какого-то другого действия, после которого файл попал в рабочий каталог)? К счастью, git status говорит, как добиться и этого. В выводе для последнего примера, неиндексированная область выглядит следующим образом:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

Здесь довольно ясно сказано, как отменить сделанные изменения. Давайте сделаем это.

U00009

Как вы видите, изменения были отменены. Вы должны понимать, что это опасная команда: все сделанные вами изменения в этом файле пропали — вы просто скопировали поверх него другой файл. Никогда не используйте эту команду, если вы не полностью уверены, что этот файл вам не нужен.

В данном случае файл Test.txt был переписан сверху своей копией из предыдущего коммита.

Помните, что всё, что является частью коммита в Git'е, почти всегда может быть восстановлено. Даже коммиты, которые находятся на ветках, которые были удалены, и коммиты переписанные с помощью --amend могут быть восстановлены. Несмотря на это, всё, что никогда не попадало в коммит, вы скорее всего уже не увидите снова.

четверг, 5 февраля 2015 г.

Основы Git - Создание Git-репозитория

Для создания Git-репозитория вы можете использовать два основных подхода. Во-первых, импорт в Git уже существующего проекта или директории. Во-вторых, клонирование существующего репозитория с другого сервера.

1) Создание репозитория в существующей директории

Если вы собираетесь начать использовать Git для существующего проекта, то вам необходимо перейти в директорию проекта и в командной строке ввести

$ git init

Эта команда создаёт в текущей директории новую поддиректорию с именем .git, содержащую все необходимые файлы репозитория — основу Git-репозитория. На этом этапе ваш проект ещё не находится под версионным контролем.

Это так же можно сделать и из контекстного меню проводника Windows в каталоге вашего проекта.

Посмотрим на примерах.

Создам в каталоге H:\Git подкаталог TextProject (полный путь H:\Git\TextProject)

И создам там пару текстовых файликов. Да, да, Git может хранить и версии простых текстовых файлов. По существу исходники это те же текстовые файлы.

Git0016

Теперь запускаем Git Bash и переходим в наш каталог командой /h/Git/TextProject

Да это Bash, надо немного привыкнуть к Linux style Улыбка

Git0017

Мы даже можем посмотреть файлики содержащиеся в каталоге командой ls

Git0018

Убедились что мы в нужном каталоге. Даем команду git init

Git0019

Все, подкаталог .git создан в каталоге TextProject

Git0020

Поскольку у нас в каталоге .git еще нет зафиксированных изменений и репозитарий там пустой (это не означает что в каталоге .git нет файлов), то мы его можем спокойно удалить и создать из контекстного меню проводника.

Git0021

И получаем в результате то же самое – создается скрытый каталог .git

Но хочу напомнить что файлы в этом каталоге еще не находятся под версионным контролем.

Если вы хотите добавить под версионный контроль существующие файлы (в отличие от пустого каталога), вам стоит проиндексировать эти файлы и осуществить первый коммит изменений. Добиться этого вы сможете запустив команду git add несколько раз (или использовать маску), указав индексируемые файлы, а затем выполнив git commit:

Git0022

Мы разберем, что делают эти команды чуть позже. Теперь у вас есть Git-репозиторий с отслеживаемыми файлами и начальным коммитом.

2) Клонирование существующего репозитория

Для получения копии существующего Git-репозитория, например, проекта, в который вы хотите внести свой вклад, необходимо использовать команду git clone.

Git получает копию практически всех данных, которые есть на сервере. При выполнении git clone с сервера зибирается (pulled) каждая версия каждого файла из истории проекта. Фактически, если серверный диск выйдет из строя, вы можете использовать любой из клонов на любом из клиентов, для того, чтобы вернуть сервер в то состояние, в котором он находился в момент клонирования.

Для этого создадим репозиторий на GitHub. Как регистрироваться на GitHub я тут объяснять не буду, это просто.

Git0023

Git0024

Git0025

На README мы нажали для того чтобы создать в проекте хоть один файлик.

Git0026

В результате имеем

Git0027

Теперь клонируем этот проект к себе на диск в каталог H:\Git\

Для этого переходим в каталог H:\Git и даем команду

git clone https://github.com/n0tb0dy/TextProject2.git

Git0028

В результате у нас в каталоге H:\Git создался каталог TextProject2 с подкаталогом .git и файлом README.md

Git0029

Так же можно склонировать проект в каталог с названием отличающимся от названия каталого проекта на сервере, для этого достаточно в командной строке указать каталог куда хотим склонировать проект

Git0030

В данном случае мы склонировали проект TextProject2 в каталогк TxT2 каталого H:\Git

Таким образом мы получили две копии одного проекта в разные каталоги

Git0031

Вот мы и научились создавать Git репозитории и делать в них первые коммиты.