Данная статья содержит шпаргалку с основными командами используемыми при работе с репозиториями 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
- переключиться на ветку mastergit 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
Чтобы не вводить каждый раз логин/пароль для авторизации в гит-репозитории, можно либо настроить подключение по ssh-ключу, либо выполнить команду:
git config --global credential.helper store
Далее еще раз выполняем запрос к репозиторию (например, git pull) - вводим логин/пароль - после этого система запомнит введенные данные и при последующих обращениях уже не будет задавать данный вопрос.
По материалам: набор команд при работе с git, Как склеить коммиты в git, Изучаем git. merge vs rebase для начинающих Шпаргалка по Git — основные команды, слияние веток, выписка веток с github Как установить имя пользователя и пароль Git
Разработка сайта
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Сопровождение сайта
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Работы по сайту
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.