Git команды для строки

Home » Git » Git команды для строки
Git Комментариев нет

commit – фиксация, коммит

merge – слияние

untracked – неотслеживаемые

tracked – отслеживаемые

staged – проиндексированные

aliases -псевдонимы

 

неотслеживаемое->отслеживаемое(рабочая папка->проиндексированное->зафиксированное)

 

Первоначальная настройка

git config –global user.name “******”
устанавливаем свое имя для всех своих коммитов

git config –global user.email “******”
устанавливаем свою почту для всех своих коммитов

git config –global user.editor “******”
устанавливаем текстовый редактор по умолчанию(vim или emacs, например)

git config list
проверка настроек

git config <ключ>
проверка конкретной настройки(ключи всех настроек можно увидеть с помощью предыдущей команды)

Получение справки

git help <команда>
справка о команде

git <команда> help
справка о команде

man git-<команда>
справка о команде

каналы #git #github IRC-сервер Freenode (irc.freenode.net)

Начало работы

git init
создать гит проект в текущем каталоге

git clone <url>
клонирует проект

git clone https://github.com/myprofile/myproject
клонирует проект с репозитория в папку myproject

git clone https://github.com/myprofile/myproject myproject2
создает папку myproject2 и клонирует туда проект(в параметре можно указать урл назначения(абс или отн путь) и другие протоколы
git://
user@server:path/to/repo.git  (SSH))

Проверка состояния файлов

git status
справка о команде

git <команда> help
справка о команде

man git-<команда>
справка о команде

Отслеживание файлов

git add <file/files/*>
добавить файлы в отслеживаемые(tracked)(если указать каталог, добавляет содержимое каталога рекурсивно), а также проиндексировать файлы, пометить файлы с конфликтом слияния(merge) как разрешенные(то, что проиндексировано, добавится при следующей фиксации(commit))

Если один и тот же файл при проверке статуса попадает в changes to be commited и changes not staged for commit, значит файл был изменен, добавлен в область индексирования, затем снова изменен. Чтобы решить эту проблему, нужно снова добавить файл в область индексирования(например, с помощью add)

git status -s
git status –short
краткий отчет о статусе

git status -s
_M filename   –  файл модифицирован но не проиндексирован
MM filenametwo  – файл модифицирован, проиндексирован, модифицирован
A filenamethree – новый файл в проекте
M_filenamefour – модифицорован, проиндексирован
?? filenamefive – новый неотслеживаемый файл

Gitignore

  1. игнорируются пустые строки и строки, начинающиеся с #
  2. работают стандартные глобальные паттерны
  3. паттерны могут заканчиваться на / (указание папки)
  4. инверсный паттерн начинается на !
  5. [abc] -любой символ из скобок
  6. * – произвольное число символов
  7. [1-9] – диапазон
  8. folder/**/folder – две звездочки-вложенные папки
  9. ? – один символ

см. больше https://github.com/github/gitignore

Конкретные изменения

git diff – непроиндексированные изменения (показывает добавленные и удаленные строки(что изменено, но пока не проиндексировано!))(сравнивается рабочая папка и область индексирования)

Если файл был модифицирован, проиндексирован, снова модифицирован, то diff покажет и проиндексированные и непроиндексированные изменения

git diff –staged   -проиндексированные изменения( показывает, что из проиндексированного! войдет в следующий коммит(будет зафиксировано)), (сравнивается область индексирования и последний коммит)

git diff –cached -проиндексированные изменения(синоним –staged)

Фиксация, изменения, удаления, перемещение

git commit -v   -написать комментарий к фиксации

git commit -m  -задать сообщение фиксации

git commit -a  -автоматически проиндексировать все отслеживаемые файлы перед фиксацией

git diff – изменения между текущей рабочей папкой и областью проиндексированного

git diff –staged   -проиндексированные изменения( показывает, что из проиндексированного! войдет в следующий коммит(будет зафиксировано)), (сравнивается область индексирования и последний коммит)

git diff –cached -проиндексированные изменения(синоним –staged)

git rm <filename> -удаляет файл из рабочей папки и из проиндексированной области(если просто удалить, то будет changed but not updated)

git rm -f <filename> -удаляет файл форсированно(даже если он был отредактирован и проиндексирован)

git rm –cached <filename> -убрать файл из области индексирования, не удаляя его из рабочей папки

git rm \*~  -можно использовать паттерны

git mv filefrom fileto  -переместить=переименовать файл, команда эквивалентна
mv filefrom fileto
git rm filefrom
git add fileto

Логи

git log – список версий

git log -p  -вывести изменения по каждому коммиту

git log -p -2  -вывести последние две записи по коммиту

git log –stat  -краткая статистика по каждой фиксации

git show – вывести информацию по конкретному коммиту

git log –pretty=oneline    – одна фиксация одна строка
git log –pretty=short
git log –pretty=full
git log –pretty=fuller
git log –pretty=format: “%h – %an, %ar : %s”          -строка по определенному формату(51 кн)

git log –pretty=format: “%h – %an, %ar : %s” -graph          -то же самое только с графом веток

git log –since=2.weeks     -фиксации последних двух недель

git log –untill  – фиксация с ограничением по дате/времени

git log –grep   -найти фиксации по вхождению слова в сообщениях фиксации

git log –author    -найти фиксации по автору

–all-match(параметер для одновременного поиска по критериям(и=или))

git log -S somestring     – фиксации где добавлена или удалена строка somestring

git log –<pathtofile>      -этот параметр обычно ставят последним с списке параметров, означает, что мы ищем только те коммиты, изменения которых коснулись данной папки

(список всех ограничивающих параметров – стр 52-53кн)

Откат, отмена индексирования

git commit -amend  -перезаписывает в последний коммит все что из области индексирования

git log -p  -вывести изменения по каждому коммиту

git log -p -2  -вывести последние две записи по коммиту

git commit -amend  -перезаписать последний коммит и сообщение к этому коммиту из области индексирования

git reset HEAD <filename>  -отмена индексирования

git checkout  -откат файлов рабочей папки к прошлому коммиту

Удаленные репозитории

git remote  -просмотр настроенных удаленных серверов

git remote -v  -просмотр URL удаленных серверов

git remote add <сокращенное имя репозитория> <url>  -добавить реппозиторий

git fetch <сокращенное  имя репозитория>  -скачать с репозитория коллеги, все что есть у него и нет у тебя

git fetch someonereponame
после этой команды, ветка master коллеги someonereponame доступна как someonerepname/master

git fetch origin  – добавление всего что было добавлено в репозиторий(не выполняет автоматического слияния с ветками)

git pull -извлекает данные с сервера с которого произошло клонирование и автоматически пытается выполнить слияние

git push
git push origin master – отправка ветки master на репозиторий origin
если кто-то уже отправил данные на репозиторий, то запушить не получится, сначала нужно скачать добавленное пользователем,встроить свои данные, затем можно пушить

git remote show -просмотр удаленных репозиториев

git remote rename -смена имен удаленных репозиториев

git remote rm – удалить ссылку на репозиторий

Теги

git tag -вывести список тегов

git tag -l ,v1.8.8*’ -вывести теги по шаблону 1.8.8

теги бывают легковесными(без комментариев) и теги с комментариями
git tag -a v1.4 -m ‘my version 1.4’ -создание тега с комментарием
параметр -m позволяет создать сообщение, которое будет храниться вместе с тегом

git show – просмотр коммитов по указанному тегу

git tag v1.8.7 – создаем легковесный тег v1.8.7 (параметры -a -s -m опускаем)

git tag -выставление тега “постфактум”

git tag -a v1.7.8 9fce86u -выставление тега v1.7.8 коммиту с контрольной суммой

созданные теги отправляются на общий репозиторий отдельно
git push origin
git push origin –tags -отправка всех тегов

Псевдонимы

git tag -вывести список тегов

git config –global alias. – задаем команде свой псевдоним
git config –global alias.chk checkout – задаем checkout псевдоним chk(теперь команду checkout можно заменить псевдонимом chk)

можно записывать свои команды
git config –global alias.unstage ‘reset HEAD –‘ -с помощью команды unstage теперь можно отменять индексирование
теперь git reset HEAD somefilename эквивалентно git unstage somefilename

удобная настройка
git config –global alias.last ‘log -1 HEAD’ командой last теперь можно выводить последний коммит

внешняя команда запускается с помощью !
git config –global alias.visual “!gitk”

 

Ветвление

Ветка в GIT, – это подвижный указатель на один из коммитов(последний из коммитов-ответвлений)
начальный коммит предков не имеет, у коммитов, полученных слиянием двух и более веток, – много предков(помимо HEAD, указателья на текущий коммит)

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

git branch – создание новой ветки(эта команда лишь создает новую ветку, но не переводит на нее указатель)

текущий коммит, текущей ветки определяется указателем HEAD

узнать на какие коммиты направлены указатели веток можно узнать с помощью
git log –decorate

git checkout – переход на другую ветку(перенос указателя HEAD, приведение файлов рабочей папки в состояние выбранного коммита)(git checkout master – возврат на ветку master)

git checkout -b – создание новой ветки и переход в нее

Объединения веток(merge)

git merge – объединить текущую ветку с данной

Перемотка(простое объединение)(fast-forward)

Вид объединения(merge), когда в текущей ветке не проводилось никаких изменений с того момента как из нее появилась целевая ветка, называется перемоткой(fast-forward).
Например, мы остановили разработку основной ветки, затем создали тестовую ветку, сделали несколько коммитов, и признали, что ветка целиком и полностью подходит как продолжение главной. Мы как бы берем указатель нашей основной метки и перемещаем его на позицию последнего коммита этой успешной ветки. В итоге тестовый и главный указатель будут указывать на один коммит и основная ветка удлиннится на количество коммитов тестовой. Проще говоря, мы как будто сдвигаем “каретку указателя” на ту позицию, которую “проторила” нам тестовая ветка… Ветка-предок, которая не продолжалась дальше того места где родилась дочерняя ветка объединяется с веткой потомком.

Трехэтапное объединение(fast-forward)

Когда коммит текущей ветки не является прямым предком ответвившейся ветки выполняется простое трехэтапное слияние.
В результате слияния образуется новый коммит – коммит слияния(merge commit)
git – определяет наиболее подходящего общего предка как основу для слияния веток

git status – посмотреть какие в каких файлах произошел конфликт помешавший слиянию
индексируя файл с помощью git add мы отмечаем, что конфликты в файле разрешены

git mergetool – выбрать инструмент слияния(есть несколько инструментов, которые могут выполнять слияние(например, opendiff))

разрешив конфликты слияния(проверка – git status) нужно вручную командой git commit закрепить результат коммитом

Удаление ветки

git branch -d – удаление ветки(если ветка не слита с текущей удалить ее не получится, только если форсированным способом удалять)
git branch -D – удаление ветки(форсированное)

git branch – (без аргументов) просмотр всех веток (*звездочка означает ветку в которой мы находимся(HEAD), звездочек может быть несколько, если находимся сразу в нескольких слитых ветках)
git branch –merged – все ветки слитые с текущей
git branch –no-merged – все ветки не слитые с текущей
git branch -v – последний коммит из каждой ветки

Принципы ветвления

Обычно параллельно основной ветке master идет ветка develop или next, эта ветка, когда достигает стабильного результата сливается с веткой master, а затем снова возникает, когда начинается новый этап разработки. Иногда таких тестовых веток много и они образуют несколько уровней, так, за счет такой многослойности добиваются большей стабильности основной ветки.
Есть еще тематические ветки. Тематическая ветка(topic branch) – ветка разрабатываемая для разработки конкретной функциональной возможности.

Удаленные ветки(remote branches)

название удаленной ветки имеет форму /
Соответственно, когда мы клонируем гит-репозиторий, авоматически создается ветка origin/master
если напишем git clone -o brname то ветка будет называться brname/master(то же самое с git init)

git fetch (например git fetch origin) – скачать с удаленного репозитория, все что было в нем добавлено, вместе с положением указателей веток(если нужно, генерирует новые, появившиеся ветки)
git fetch не выполняет объединения веток, он просто добавляет то что появилось нового. Автоматически ветки не синхронизированы с сервером. Чтобы их добавлять на сервер нужно ветки отправлять на сервер вручную – git push
git автоматически превращает имя ветки branchname в refs/heads/branchname:refs/heads/branchname (означает – использовать локальную ветку branchname для обновления удаленной ветки branchname) (эквивалентно записи git push origin branchname:branchname)

git config –global credential.helper.cache – настройка кеша учетных данных(можно повысить время кеширования пароля)

Получение новых удаленных веток не дает нам права редактировать эти ветки. Однако эти ветки можно слить в локальные ветки.
Если требуется своя копия удаленной ветки, доступная для редактирования, нужно создать ее git checkout -b

Ветка слежения(tracking branch)

ветка слежения, это копия удаленной ветки, автоматически формирующаяся при переходе в локальную ветку, созданную из удаленной. Находясь на этой ветке система автоматически определяет что обновлять при команде git push.
Для создания ветки слежения можно использовать как
git checkout -b так и
git checkout –track

git branch –set-upstream-to – сменить удаленную ветку для слежения
git branch -u – сменить удаленную ветку для слежения

для обращения к веткам слежения можно использовать удаленную запись git merge @{u} или git merge @{upstream} вместо git merge origin/master

git branch -vv – список веток слежения и веток за которыми они следят (ahead 3 – 3 локальных коммита не отправленных на сервер, behind 3 – 3 удаленных коммита не скачанных с сервера и не слитых в ветку, trying something new – ветка не связана ни с одной удаленной)(сравниваются данные с последнего скачивания(fetch))
git fetch –all -скачать все

pull – это команда эквивалентная последовательности команд fetch и merge, она скачивает а затем пытается выполнить слияние удаленных веток с ветками слежения.(рекомендуется пользоваться все таки отдельно fetch и merge)

git push –delete– удаление удаленной ветки

 

git init создание репозитория*
git status информация о файлах в репозитории̣(выявляет неотслеживаемые файлы)
git add . добавить все файлы в отслеживаемые
git commit -m “my first commit” сделать слепок(коммит) системы, с комментарием
git commit -a добавить изенение, сделать коммит с комментарием
git commit -v просмотреть все изменения с последнего коммита
git diff разница между рабочим каталогом и индексом
git diff -staged разница между индексом и последним коммитом
git log история коммитов
git remote add origin https://github.com/******/*****.git добавление проекта в удаленный репозиторий
git push -u origin master пушим (заливаем изменения на сервер)
git clone https://github.com/******/*****.git клонировать к себе удаленный проект с репозитория
git pull берем себе все пуши проект с репозитория
git config –global user.name “******” устанавливаем свое имя для всех своих коммитов
git config –global user.email “******” устанавливаем свою почту для всех своих коммитов
git config –global user.editor “******” устанавливаем текстовый редактор по умолчанию(vim или emacs, например)
git config устанавливаем свою почту для всех своих коммитов
git config list список всех настроек
git help справка
git help <commandname> справка о команде commandname

 

Работа с карманом(незакомиченное)

git stash save –keep-index засунуть в карман только не проиндексированное командой add
git stash save засунуть в карман все
git stash apply достать из кармана
git stash drop очистить карман

*правая мышь + shift – наибыстрый способ открыть командную строку в текущем каталоге (Windows)
**по умолчанию все файлы в гите – неотслеживаемы

Много интересного о GIT можно найти в книге от разработчиков этой системы – С. Чакона и Б. Штрауба, а также в блоге https://webhamster.ru

LEAVE A COMMENT