Инструменты пользователя

Инструменты сайта


subjects:programming:git

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
subjects:programming:git [2017/09/28 15:01]
создано
subjects:programming:git [2023/05/01 19:29]
Объединение коммитов
Строка 13: Строка 13:
 По умолчанию репозиторий хранится в подкаталоге с названием «.git» в корневом каталоге рабочей копии дерева файлов,​ хранящегося в репозитории. По умолчанию репозиторий хранится в подкаталоге с названием «.git» в корневом каталоге рабочей копии дерева файлов,​ хранящегося в репозитории.
  
-===== Заголовок =====+===== Использование Git ===== 
 +==== Инициализация ==== 
 +Создание локального репозитория в текущем каталоге 
 +<code bash> 
 +$ git init 
 +</​code>​ 
 + 
 +Клонирование удаленного репозитория в локальный каталог [с указанным имени] 
 +<code bash> 
 +$ git clone https://​github.com/​userName/​originName.git [newLocalName] 
 +</​code>​ 
 + 
 +=== Настройка === 
 +Задаем имя пользователя и электронную почту. 
 + 
 +Глобально для всех проектов текущего пользователя:​ 
 +<code bash> 
 +$ git config --global user.name "John Doe" 
 +$ git config --global user.email johndoe@example.com 
 +</​code>​ 
 + 
 +Для конкретного проекта (эти настройки переопределят глобальные):​ 
 +<code bash> 
 +$ git config --local user.name "John Doe" 
 +$ git config --local user.email johndoe@example.com 
 +</​code>​ 
 + 
 +=== .gitignore === 
 +Зачастую,​ у вас имеется группа файлов,​ которые вы не только не хотите автоматически добавлять в репозиторий,​ но и видеть в списках неотслеживаемых. К таким файлам обычно относятся автоматически генерируемые файлы (различные логи, результаты сборки программ и т.п.). В таком случае,​ вы можете создать файл .gitignore с перечислением шаблонов соответствующих таким файлам. Вот пример файла .gitignore:​ 
 + 
 +<file bash .gitignore>​ 
 +*.[oa] 
 +*.log 
 +</​file>​ 
 + 
 +Первая строка предписывает Git'у игнорировать любые файлы заканчивающиеся на .o или .a — объектные и архивные файлы, которые могут появиться во время сборки кода. Вторая - то же самое, для файлов заканчивающихся на "''​.log''"​. 
 + 
 +Исключаем папки и файлы, начинающиеся с двух подчёркиваний и содержимое ''​virt.py3'':​ 
 +<file bash .gitignore>​ 
 +__*/* 
 +__* 
 +virt.py3/​* 
 +</​file>​ 
 + 
 +==== help ==== 
 +<code bash>$ git help</​code>​ 
 + 
 +==== status ==== 
 +Вывести информацию обо всех изменениях,​ внесенных в дерево директорий проекта:​ 
 +<code bash>$ git status</​code>​ 
 + 
 +Краткий вывод:​ 
 +<code bash>$ git status --short 
 +$ git status --s</​code>​ 
 + 
 +Обозначения в выводе команды ''​git status -s'':​ 
 +  * ''​M''​ - (**m**odified) отслеживаемые,​ изменились с прошлого коммита,​ еще не добавлены 
 +  * ''​D''​ - (**d**eleted) отслеживаемые,​ удалены после прошлого коммита,​ еще не добавлены 
 +  * ''?''​ - (untracked) неотслеживаемые,​ не запрещены к добавлению 
 +  * ''​!''​ - (ignored) неотслеживаемые,​ запрещены к добавлению (например,​ в .gitignore) 
 + 
 +==== add ==== 
 +<code bash> 
 +$ git add . 
 +$ git add -all 
 +$ git add -A 
 +$ git add -update 
 +$ git add -u 
 +</​code>​ 
 + 
 +  * ''​git add .''​ -- Добавляет файлы ''​M'',​ ''​D'',​ ''?''​. 
 +  * ''​-all'',​ ''​-A''​ -- Эти варианты эквивалентны и добавляют ''​M'',​ ''​D'',​ ''?''​. Без точки — из всей рабочей области. С точкой — только текущий путь: ''​git add -A .''​ = ''​git add .''​ + ''​git add -u .''​ \\ <code bash>git add .</​code>​ 
 +  * ''​-update'',​ ''​-u''​ -- Git обновляет (update) статус уже отслеживаемых файлов т.е. M, D. 
 +  * ''​git add *''​ -- Этот синтаксис лучше не использовать,​ т.к. он пытается добавить ''​M'',​ ''?'',​ ''​!'',​ причём последнее приводит к ошибке. 
 + 
 +==== commit ==== 
 +<code bash> 
 +$ git commit 
 +$ git commit -a 
 +$ git commit -m "​text"​ 
 +</​code>​ 
 +  * ''​git commit''​ -- Если индекс не пустой,​ то на его основе будет совершен коммит,​ после чего пользователя попросят прокомментировать вносимые изменения. 
 +    * ''​-a''​ -- Совершит коммит,​ автоматически индексируя изменения в файлах проекта. **Новые** файлы при этом индексироваться **не будут**! Удаление же файлов будет учтено. 
 +    * ''​-m "​text"''​ -- Комментируем коммит прямо из командной строки вместо текстового редактора. \\ <code bash>git commit -m "​Название коммита"</​code>​ 
 +    * Чтобы изменить имя последнего коммита,​ достаточно ввести:​ \\ <code bash>git commit --amend -m "​Новое название коммита"</​code>​. Для изменения имени других коммитов,​ нужно сделать:​ \\ <code bash>git commit --amend -c <commit ID></​code>​ 
 + 
 +==== Переименование файла ==== 
 +Переименовывать или перемещать файлы и папки нужно из ''​git''​. Подробнее см. справку. 
 +<code bash> 
 +$ git mv old_filename new_filename 
 +</​code>​ 
 + 
 +==== Объединение коммитов ==== 
 +  * Объединение последних **2** (//​можно использовать любое разумное целое число//​) коммитов в один: \\ 
 +<code bash> 
 +$ git rebase -i HEAD~2 
 +</​code>​ 
 +    * **Откроется** текстовый редактор,​ в котором первые две строки соответствуют последним двум коммитам. 
 +    * В начале каждой строки стоит слово ''​pick''​. Вам **необходимо** изменить слово ''​pick''​ на букву ''​s''​ у второй строки. Это означает,​ что данный коммит будет объединен с предыдущим коммитом -- это написано в комментариях. 
 +    * **Сохраните** изменения и закройте редактор. 
 +    * Снова **откроется** редактор,​ в котором вам предлагается ввести сообщение к коммиту,​ который и является объединением. Отредактируйте сообщение к коммиту,​ **сохраните** изменения,​ и закройте редактор. 
 + 
 +==== Разное ==== 
 +  * ''​git rm FILE1 FILE2''​ -- Удалить файл(ы) из индекса и дерева одновременно. 
 +  * ''​git reset''​ -- Сбросить весь индекс. \\ Помимо работы с индексом,​ позволяет сбросить состояние проекта до какого-либо коммита в истории:​ 
 +    * «Мягкий» (с ключом "​--soft"​) резет оставит нетронутыми ваши индекс и все дерево файлов и директорий проекта,​ вернется к работе с указанным коммитом. \\ ''​git reset --soft HEAD^''​ -- переходим к работе над уже совершенным коммитом,​ сохраняя все состояние проекта и проиндексированные файлы. 
 +    * «Жесткий» резет (ключ --hard) — команда,​ которую следует использовать с осторожностью. Git reset --hard вернет дерево проекта и индекс в состояние,​ соответствующее указанному коммиту,​ удалив изменения последующих коммитов. \\ ''​git reset --hard HEAD~3''​ -- Никто и никогда не увидит три последних коммита.  
 +  * ''​revert''​ -- отмена изменений,​ произведенных в прошлом отдельным коммитом. Для использования команды необходимо,​ чтобы состояние проекта не отличалось от состояния,​ зафиксированного последним коммитом. 
 +    * ''​git revert config-modify-tag''​ --  отменяем коммит,​ помеченный тегом. 
 +    * ''​git revert 12abacd''​ -- отменяем коммит,​ используя его хэш. 
 +  * ''​git log''​ -- Разнообразная информация о коммитах в целом, по отдельным файлам и различной глубины погружения в историю. 
 +  * ''​git diff''​ -- Отличия между деревьями проекта;​ коммитами;​ состоянием индекса и каким-либо коммитом. 
 +    * ''​git diff ''​ -- Изменения,​ не внесенные в индекс. 
 +    * ''​git diff --cached''​ -- Изменения,​ внесенные в индекс. 
 +    * ''​git diff HEAD''​ -- Изменения в проекте по сравнению с последним коммитом. 
 +    * ''​git diff HEAD^''​ -- Изменения в проекте по сравнению с **пред**последним коммитом. 
 +  * ''​git branch''​ -- Создание,​ перечисление и удаление веток  
 +    * ''​git branch''​ -- Просто перечислит существующие ветки, отметив активную. 
 +    * ''​git branch new-branch''​ -- Создаст новую ветку new-branch. 
 +    * ''​git branch -d new-branch''​ -- Удалит ветку, если та была залита (merged) с разрешением возможных конфликтов в текущую. 
 +    * ''​git branch -D new-branch''​ -- Удалит ветку в любом случае. 
 +    * ''​git branch -m new-name-branch''​ -- Переименует ветку. 
 +    * ''​git branch --contains v1.2''​ -- Покажет те ветки, среди предков которых есть определенный коммит. 
 +  * ''​git checkout''​ -- Переключение между ветками,​ извлечение отдельных файлов из истории коммитов 
 +  * ''​git rebase''​ -- Построение ровной линии коммитов  
 +  * ''​git cherry-pick''​ -- Применение к дереву проекта изменений,​ внесенных отдельным коммитом  
 +  * ''​git tag''​ -- Тэги как способ пометить уникальный коммит  
 +  * ''''​ --  
 + 
 + 
 +==== Удаленный репозиторий ==== 
 +  - Создаём удаленный репозиторий (например на GitHub). 
 +  - Связываем локальный репозиторий с удаленным<​code bash>$ git remote add origin https://​github.com/​userName/​originName.git</​code>​ 
 +  - Верифицируем что удаленный репозиторий связан с нашим<​code bash>$ git remote -v</​code>​ 
 +  - Публикуем ветку master на удаленном репозитории<​code bash>$ git push -u origin master</​code>​ 
 + 
 +В дальнейшем нам потребуется только последний пункт. 
 + 
 +===== Полезно ===== 
 +==== URL ==== 
 +  * Pro Git book: __git-scm.com/​book/​ru/​v2__ 
 +  * 30 команд Git: __habr.com/​post/​599929/​__ 
 +  * Git шпаргалка:​ __pr0git.blogspot.ru/​p/​git.html__ 
 +  * Курс уроков:​ __www.atlassian.com/​ru/​git/​tutorials__ 
 + 
 +==== Программы ​==== 
 +  * ''​git**g**'':​ __wiki.gnome.org/​Apps/​Gitg__ 
 +  * ''​git**k**'',​ ''​git **gui**'':​ __git-scm.com/​__
  
subjects/programming/git.txt · Последние изменения: 2023/05/01 19:29 —

На главную страницу Обучение Wikipedia Тестирование Контакты Нашли ошибку? Справка

Записаться на занятия

Ошибка Записаться на занятия к репетитору

Телефоны:

  • +7 (910) 874 73 73
  • +7 (905) 194 91 19
  • +7 (831) 247 47 55

Skype: eduVdom.com

закрыть[X]
Наши контакты