Справка по гит
Собрал здесь часто используемые мной команды системы контроля версий git
Создание репозитория
Репозиторий создается на github.com, bitbucket.org или в вашем gitLab. После чего система предложит набор команд, для инициализации репозитория на локальном компьютере.
Порядок команд инициализации проекта на локальном компьютере может выглядеть следующим образом:
Заходим в каталог своего проекта, который хоти разместить в системе контроля версий.
git init
git add .
git commit -m "first commit"
git remote add origin git@github.com:greenpeas/testproject.git
git push -u origin master
Списки игнорирования .gitignore
# комментарий — эта строка игнорируется
# не обрабатывать файлы, имя которых заканчивается на .a
*.a
#игнорировать файлы заканчивающиеся на о или а
*.[oa]
# НО отслеживать файл lib.a, несмотря на то, что мы игнорируем все .a файлы с помощью предыдущего правила
!lib.a
# игнорировать только файл TODO находящийся в корневом каталоге, не относится к файлам вида subdir/TODO
/TODO
# игнорировать все файлы в каталоге build/
build/
# игнорировать doc/notes.txt, но не doc/server/arch.txt
doc/*.txt
# игнорировать все .txt файлы в каталоге doc/
doc/**/*.txt
Запретить индексировать свойства файла (git ignore chmod)
Правим в .gitconfig (он находится в папке .git в корне проекта) секцию [core]:
[core]
filemode = false
Либо в консоли:
git config core.filemode false
Удалить файл из индекса
Файл удалится из индекса, но останется на локальной машине. Так же он удалится у всех, кто сделает git pull. Это полезно в тех случаях, когда файл был создан и добавлен в индекс раньше, чем его занесли в .gitignore.
git rm --cached имя_файла
Работа с ветками
У нас имеется проект. Ветка master. Если хотим создать свою ветку проекта, то это делается перед работой (разработкой). Можно начать разрабатывать в мастер ветке. Главное не комититься. При создании ветки (или переходе в другую) все правки перейдут.
Просмотр имеющихся веток
git branch
Создаем новую ветку
git branch название_ветки
Заходим в неё
git checkout название_ветки
Ведем разработку… Комитимся в этой ветке:
git commit -am "коммент"
Обязательно переходим в master, что бы слить к себе обновления других участников команды и стягиваем мастера:
git checkout master
git pull
Переходим обратно в ветку разработки:
git checkout название_ветки
Сливаем нашу ветку с обновленным мастером:
git merge master
Отправляем нашу ветку на сервер:
git push origin название_ветки
Можно сделать быстрее, но мы останемся без обновленного мастера:
Находясь в своей ветке мы можем стянуть обновления мастера прям с сервера командой
git pull origin master
Ведем разработку дальше. При необходимости делаем коммит, обновляем ветку с мастера, как было описано выше… И так сколько угодно раз.
Как только ветка окончательно готова, можно залить её в мастера. Для этого переходим в master и обновляем его с сервера:
git checkout master
git pull
Сливаем мастера с нашей веткой:
git merge название_ветки
Отправляем ветку master на сервер
git push
После выполнения задачи, для которой создавалась ветка, её можно удалить:
git branch -D название_ветки
Стянуть удаленную ветку и сразу переключиться на неё:
git fetch && git checkout issue2
Откат изменений на 2 коммита назад:
git reset --hard HEAD~2
Откат по хэшу коммита:
git reset --hard HEAD hash
Принудительный коммит (после отката):
git push -f origin master
без -f будет ругаться, что версия младше чем на удалёнке.
Сброситься до последнего коммита. Например если вы начала что то делать и передумали:
git reset --hard HEAD
Посмотреть список отличий локальной версии от удаленной
git diff --name-only master origin/master