НЕ МОЛЧИ!!!    Сделай что-нибудь, чтобы остановить войну России в Украине.
...бойтесь людей равнодушных - именно с их молчаливого согласия происходят все самые ужасные преступления на свете.   ("Репортаж с петлёй на шее")

Команды Git

Приведены наиболее употребляемые команды Git, каждая команда имеет пояснительный комментарий.

Команды Git по категориям

На этой странице собран список наиболее востребованных консольных команд системы контроля версий Git,  команды сгруппированы по категориям, это позволит легко отыскать нужную. Конечно, это неполный их перечень, но и его хватит на 90% ваших задач. Если встречаются неизвестные термины, советую посмотреть их описание на странице Введение в Git.

Для получения помощи по консольным командам Git, можно воспользоваться такими командами:

git help <команда>
git <команда> —help
git <команда> -h

Индексирование изменений

git add file_name – добавить файл file_name в следующий коммит

Если надо добавить в индекс несколько файлов, то они перечисляются в конце команды через пробел.

git add . – добавить в индекс все содержимое текущей директории рабочей области
git add :/ – добавить в индекс содержимое всей рабочей области, работает из любой директории
git add -u – добавляет в индекс измененные и удаленные файлы текущей директории, новые файлы не добавляются
git reset – откат изменений предыдущего коммита.

В этой команде очень важны опции, т.к. они определяют степень отката. Поясним это на примерах.
1. git reset – – soft HEAD~ — указатель репозитория переместится на предыдущий коммит(HEAD~), файлы рабочей области и список индекса останутся без изменений, т.е. в состоянии последнего коммита.
2. git reset HEAD~ — указатель репозитория переместится на предыдущий коммит(HEAD~), список индекса тоже изменится и будет в состоянии, как перед предпоследним коммитом, т.е. откат изменений произойдет как по коммиту, так и по индексу, файлы рабочей области не изменяются. Фактически будут отменены последние команды git commit и git add. Это неполная версия команды, более полный вид этой же команды:

git reset – – mixed HEAD~

Поскольку ключ —mixed действует по умолчанию, то допустим упрощенный синтаксис команды.
3. git reset – – hard HEAD~ — полностью отменяет все действия, совершенные после предпоследнего коммита. Будут изменены указатель репозитория Git, состояние индекса и файлы рабочей области на состояние, которое было после предпоследнего коммита.
Внимание! Будьте осторожны, поскольку команда git reset —hard HEAD~ изменяет файлы рабочей области, т.е. все вновь созданные файлы и все изменения в существующих файлах рабочего проекта пропадут без предупреждения!
Подробнее о команде git reset вы можете почитать здесь.

git rm –f text.txt – удаляет файл text.txt из рабочей области и из индекса.
 

Поскольку по этой команде возможно удаление из проекта и индекса сделанных ранее изменений, то некоторой защитой от ошибочных действий служит ключ «-f«.

git ls-files –s – позволяет просмотреть состояние индекса

 

Коммит

git commit –a – сделать коммит всех измененных файлов индекса.

Вновь созданные, но не индексированные файлы сохранены в репозитории не будут. Ключ «-a» команды git commit позволяет не индексировать предварительно изменения перед коммитом, т.к. при этом ключе перед коммитом происходит автоматическое индексирование всех отслеживаемых файлов.

git commit -a -m «описание изменений» – сделать коммит с комментарием в командной строке. На мой взгляд наиболее эффективная команда, все изменения отслеживаемых файлов будут проиндексированы и записаны в локальный репозиторий, кроме того тут же можно прокомментировать зафиксированные изменения.
git commit file_list – в репозиторий запишутся только перечисленные файлы, если они присутствовали в индексе.
git checkout commit_id — откат до более раннего коммита c идентификатором commit_id.

Идентификатор коммита можно узнать с помощью команды git log.

Работа с Git репозиторием

git init – создание локального репозитория в текущей папке.
git clone https://xxx@bitbucket.org/project.git – в локальном хранилище создает копию(клон) удаленного репозитория.
git remote add reposit_name reposit_url – добавление удаленного репозитория к локальному.
git remote – выведет псевдонимы удалённых репозиториев, созданных в текущем репозитории.
git remote –v — выведет псевдонимы удалённых репозиториев с их URL.
git push origin – заливает все ветки локального репозитория в удаленный репозиторий.
git push origin master – заливает ветку master локального репозитория в удаленный репозиторий.

Эта команда работает, если вы клонировали свой локальный репозиторий, т.к. origin – это синоним удаленного репозитория, откуда был клонирован локальный.

git pull origin – залить все ветки с удаленного репозитория на локальный репозиторий.
git pull origin master – залить ветку master с удаленного репозитория на локальный репозиторий.
git fetch origin — скачать все ветки с удаленного репозитория, но не заливать их в локальный репозиторий.
git fetch origin master — скачать ветку master с удаленного репозитория, но не заливать ее в локальный репозиторий.
git commit —amend — позволяет изменить ошибочный коммит.

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

Работа с ветками

git branch – получить список веток, текущая ветка будет отмечена звездочкой *.
git branch –a – получить список всех веток – как локального, так и удаленного репозитория.
git branch -m новое_имя – переименует ветку.
git branch имя_новой_ветки – создает в репозитории новую ветку. Команда только создает новую ветку, но указатель HEAD на новую ветку не переключается.
git checkout имя_ветки – переключает указатель HEAD на другую ветку. После выполнения команды файлы проекта меняются на то состояние, в котором они были на ветке «имя_ветки».
git checkout –b имя_новой_ветки – создает новую ветку и переходит на нее. Эта команда эквивалентна следующей паре команд: git branch имя_новой_ветки и git checkout имя_новой_ветки.
git branch –d имя_удаляемой_ветки – удаляет ветку из репозитория.
git push origin -d имя_удаляемой_ветки – удаляет ветку из удаленного репозитория origin.
git push origin master – заливает ветку master локального репозитория в удаленный репозиторий.
git pull origin master – залить ветку master с удаленного репозитория на локальный репозиторий.
git fetch origin master — скачать ветку master с удаленного репозитория. Скачивает ветку master из удаленного репозитория, но без заливки ее в локальный репозиторий.
git merge другая_ветка – команда слияния двух веток, текущей и указанной. Изменения происходят в текущей ветке.
git pull origin имя_ветки – производит слияние ветки в локальном репозитории с веткой удаленного хранилища. При слиянии используется текущая ветка локального репозитория и скачанная ветка «имя_ветки» удаленного репозитория.

Примечание. Разница между 2-мя предыдущими командами в том, что через merge производят слияние веток локального репозитория, через pull удобно объединять ветку локальную с веткой из удаленного репозитория

git merge test – объединяет изменения из ветки test в текущую ветку . Ветка test не изменяется.

git rebase master — перебазирование. Переносит изменения из текущей ветки в ветку master. Более полное описание команды смотрите здесь.

Обе команды merge и rebase объединяют изменения одной ветки с другой. Разница между ними следующая. После merge у вас остаются две ветки, одна из которых включает изменения другой. После rebase у вас будет одна полноценная ветка, в которой учтены изменения обоих веток. Т.е., после rebase в проекте становится меньше альтернативных веток.

При слиянии изменений командами merge и rebase возможны конфликты, когда изменения в ветках пересекаются. В этом случае Git не может самостоятельно объединить ветки из-за конфликтов в файлах. Он приостанавливает объединение и выдает сообщение о конфликте. Чтобы посмотреть, какие файлы не объединились, можно выполнить git status, git diff, потом вручную исправить конфликты в файлах и выполнить индексирование командой git add.

 

Получение дополнительной информации

git status – отслеживает состояние файлов рабочей области.
git diff – сравнивает не индексированные изменения с последним коммитом.

Обратите внимание, если вы проиндексируете свои изменения, то команда покажет, что после последнего коммита изменений не было. Чтобы увидеть индексированные изменения используйте ключ (см. ниже).

git diff —staged – сравнивает индексированные изменения с последним коммитом.
git remote – выводит список сокращенных имен для всех удаленных репозиториев.
git remote –v – выводит список URL удаленных репозиториев и их псевдонимы.
git branch — выводит на экран список веток, текущая ветка будет отмечена звездочкой *.
git branch –a – получить список всех веток – как локального, так и удаленного репозитория.
git annotate file_name — выводит измененные строки файла и информацию о коммитах с его изменениями.
git log – выводит историю изменений.
git log —reverse – история изменений в обратном порядке.
git log gitlog.txt – запишет лог в файл gitlog.txt в рабочей области.
git log file_name – история изменений конкретного файла.
git log -p file_name – история конкретного файла c просмотром сделанных изменений.
git log | grep -e «test» – поиск по слову test в комментариях.
git show commit_id – на экран выводятся изменения по commit_id.
git show HEAD^ — вывод изменений 1-го родителя коммита. Выводятся изменения предыдущего коммита. В пояснении не случайно указано «первого родителя коммита», см. следующую команду.
git show HEAD~ — вывод изменений 2-го родителя коммита.

При слиянии веток у коммита могут быть два и более родителей.

Как исключить файлы из отслеживания

Если вы хотите, чтобы Git не только не отслеживал какие-то файлы, но и не сообщал вам о них, то надо создать файл  .gitignore в корне проекта , в котором с помощью специальных шаблонов можно задать файлы для игнорирования. Для создания шаблонов в этом файле используются шаблоны glob, которые представляют собой упрощенные регулярные выражения, например,
# — признак комментария, такие строки игнорируются в файле исключений.
*.[ab] – игнорировать файлы, заканчивающиеся на .a или .b
*~ – игнорировать файлы, заканчивающиеся знаком ~

Более подробно о том, как запретить отслеживать некоторые файлы проекта проекта можно прочитать здесь.

О редакторе

Для вывода текста или создания комментария Git использует редактор Vim(на момент написания статьи). Как с ним работать, вам подскажет Гугл.