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

70
20.11.2018

Данная статья содержит шпаргалку с основными командами используемыми при работе с репозиториями 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

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

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

cd ~/projects/someproject
git clone git@bitbucket.org:<user_name>/some_project.git
cd some_project

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

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

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

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

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

git init

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

git remote add origin git@bitbucket.org:username/project.git

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

git clone git@bitbucket.org: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

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

Процесс слияния веток при командной работе - достаточно трудоемкий процесс - нужно правильно учитывать изменения, сделанные всеми участниками команды. Процесс объединения веток может быть в формате 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



Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

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