Git основные команды

Данная статья содержит шпаргалку с основными командами используемыми при работе с репозиториями git.

Я предпочитаю пользоваться BitBucket при работе с репозиториями. Чисто исторически - изначально понравилось работать с данным сервисом и пока не менял.

И работаю я из Linux, поэтому работа с git идет из терминала Linux.

Заходим на Bitbucket, проходим регистрацию, создаем репозиторий под проект.

Для подключения к репозиторию, нужно сгенерировать ключ доступа и поместить данный ключ в настройки аккаунта (именно аккаунта, а не репозитория, т.е. вам примерно вот сюда: https://bitbucket.org/account/user/<user_name>/ssh-keys/).

Тут нужно будет добавить новый ключ. Для этого его нужно сначала сгенерировать (если еще не генерировали). Для этого в терминале выполняем команду:

ssh-keygen
cat ~/.ssh/id_rsa.pub

Копируем публичный ключ в буфер обмена:

xclip -sel clip < ~/.ssh/id_rsa.pub

или для Mac:

cat ~/.ssh/id_rsa.pub | pbcopy

Вставляем полученный ключ в кабинет на BitBucket. По этому ключу система сможет подключаться к репозиторию на Bitbucket без постоянного ввода логина и пароля

Далее - заходим в созданный репозиторий на Bitbucket (или GitHub, или еще где - то уже как вам удобнее) и смотрим адрес для клонирования репозитория. Открываем папку с проектом у себя в системе и клонируем сюда новый репозиторий:

cd ~/projects/someproject
git clone [email protected]:<user_name>/some_project.git
cd some_project

Краткий набор команд для работы с репозиторием.

Далее работа с репозитарием сводится к основному набору команд (push - вливание локальных изменений в удаленный репозиторий; pull - вливание изменений из удаленного репозитория в локальный):

  • git fetch origin - скачать все ветки с сервера, но не мержить их
  • git checkout master - переключиться на ветку master
  • git pull origin master - получить все изменения ветки master с удаленного сервера
  • git checkout -b feature/#условное нзвание ветки# - создание новой ветки. "feature/" принято обозначать ветки, связанные с разработкой нового функционала
  • git checkout -b fix/#условное нзвание ветки# - аналогично предыдущему. "fix/" обычно используется для веток, реализующих исправления по коду, выполненному ранее
  • git add #файл(ы)# - файл или файлы (через пробел), изменения по которым должны быть помещены в данную ветку
  • git commit -m"Краткое описание изменений" - коммит произведенных изменений в ветку
  • git push origin feature/#условное нзвание ветки# - отправить ветку на сервер
  • git merge feature/#условное нзвание ветки# - смержить ветку "feature/#условное нзвание ветки#" в текущую ветку

Вот, в принципе, и весь основной набор команд для работы с репозиторием (без учета возможности наличия кофликта, конечно:) ). Далее рассмотрим более подробно полный набор команд, которые могут пригодиться при работе с GIT:

Базовые операции с репозиторием

Инициализировать репозиторий

git init

Добавить удаленный репозиторий

git remote add origin [email protected]:username/project.git

Клонировать репозиторий с сервера

git clone [email protected]:username/project.git

Статус

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

git status

Добавляем и исключаем файлы

Добавляем file.js

git add file.js

Добавляем все файлы

git add .

Отменить изменения файла file.js

git reset file.js

Резет для всех файлов:

git reset .

Изменения

Смотрим изменения

git diff

Смотрим изменения в file.js

git diff file.js

Удаление файлов

Удалить из удаленного репозитория ненужные файлы

git ls-files --deleted -z | xargs -o git rm
git commit -m"Deleted ..."
git push origin branchname

Удаление файлов из кеша:

git rm -r --cached /dir 

Делаем коммиты

Делаем коммит

git commit -m 'commit message'

Делаем коммит, сразу добавив все файлы

git commit -a -m 'commit message'

Перезаписываем последний коммит

git commit --amend -m 'new commit message'

Ресет последнего коммита

git reset --soft HEAD^

Откатиться к конкретному коммиту (хэш смотрим в «git log»):

git reset --hard d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4

Управляем ветками

Смотрим локальные ветки

git branch

Смотрим локальные и удаленные ветки

git branch -a

Переключаемся на мастер

git checkout master

Создаем новую ветку и переключаемся на нее

git checkout -b new_branch

Создаем локальную ветку как копию с удаленного сервера

git checkout -b new_branch origin/new_branch

Удаляем локальную ветку (пустую или влитую в мастер)

git branch -d new_branch

Просто удаляем локальную ветку

git branch -D new branch

Удаляем ветку с сервера

git push origin :new_branch

Подтягиваем изменения ветки мастер

git pull --rebase origin master

Подтягиваем изменения с сервера

Подтягиваем все изменения с сервера, не вливая их

git fetch

Пушим ветку

git push origin new_branch

Пушим ветку с перезаписью истории коммитов (только когда хорошо понимаете, что делаете)

git push -f origin new_branch

Если нужно обнулить локальные изменения данными из репозитория, выполняем код:

git fetch origin
git reset --hard origin/master

Слияние веток

Процесс слияния веток при командной работе - достаточно трудоемкий процесс - нужно правильно учитывать изменения, сделанные всеми участниками команды. Процесс объединения веток может быть в формате merge и rebase. Данный процесс хорошо описан в статье.

Просто мерджим ветку в текущую

git merge new_branch

Мерджим ветку с созданием мердж-коммита

git merge --no-ff new_branch

Ребейзимся от мастера

git rebase master

Работаем со стэшем

Stash позволяет временно скрыть все выполненные изменения

Стэшим изменения

git stash

Вытаскиваем последние изменения из стэша

git stash pop

Смотрим список стэша

git stash list

Очищаем стэш

git stash clear

Вытаскиваем конкретные изменения из стэша

git stash apply stash@{2}

Выташить все правки из стеша

git stash apply

История

Смотрим историю

git log

Смотрим историю с изменениями в файлах

git log -p

История коммитов в одну строку

git log --oneline

История коммитов в виде дерева

git log --stat --graph

Кто работал с файлом

git blame file.js

Поиск по ключевому слову в комментариях к коммиту

git log | grep -e "first"

Какие именно изменения прошли в коммите

git show 99452d955bdb57e7e4f2b09f8ce2fbb6cd56377a

Сравнение ветки с master

Как далеко разъехалась ветка с мастером

git cherry master

Как далеко разъехалась ветка с удаленным мастером

git cherry origin/master

Флаг -v, больше информации

git cherry -v master

На сколько коммитов ветка уехала от мастера

git cherry master | wc -l

Копируем коммит в текущую ветку

git cherry-pick hash_commit

git cherry-pick помогает применить один-единственный коммит из одной ветки к дереву другой.

Склеиваем коммиты

git rebase --interactive

Склеить 5 последних комитов

git rebase -i HEAD~5

Разрешение конфликтов

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

CONFLICT (content): Merge conflict in path/file.php
Automatic merge failed; fix conflicts and then commit the result.

Если открыть теперь конфликтный файл path/file.php - в коде будут куски с конфликтами - конфликтные места необходимо устранить, залить файлы с изменениями в ветку и произвести коммит произведенных изменений, после чего можно повторить слияние.

Как решить конфликт бинарных файлов

Допустим, при слиянии с другой веткой git выдал ошибку. Команда git status возвращает информацию о конфликте. Конфликтный файл является бинарным (это могут быть архивные файлы, изображения и т.п.), и решение конфликта стандартным способом, с помощью редактирования - не возможно. Чтобы решить такой конфликт, надо просто выбрать - какая версия файла будет использоваться: ваша или из вливаемой ветки.

Чтобы использовать свой вариант файла, вводим команду

git checkout --ours binary.dat
git add binary.dat

Если мы выбираем версию из вливаемой ветки

git checkout --theirs binary.dat
git add binary.dat

Сокращение git-команд для ленивых

Когда слишком часто вы обращаетесь к командам git, возможно, имеет смысл настроить сокращения команд, для более быстрого их набора, хотя, лично я не рекомендую такую практику. Сокращения делаются так:

	git config --global alias.co checkout
	git config --global alias.br branch
	git config --global alias.ci commit
	git config --global alias.st status

По материалам: набор команд при работе с git, Как склеить коммиты в git, Изучаем git. merge vs rebase для начинающих Шпаргалка по Git — основные команды, слияние веток, выписка веток с github

Количество показов: 8199
20.11.2018

Возврат к списку

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.