GIT
.gitconfig
Конфигурация git
# git config --global user.name "Vasya Pupkin" # git config --global user.email "vasya@mail.ru"
Просмотр конфигурации
# git config -l user.name=Vasya Pupkin user.email=vasya@mail.ru
GIT INIT
Создание репозитория
Команда git init создает в директории пустой репозиторий в виде директории .git, где и будет в дальнейшем храниться вся информация об истории коммитов, тегах, ходе разработки проекта
# mkdir myproject # cd project # git init
GIT STATUS
Текущее состояние индекса.
Можно увидеть какие будут произведены изменения при применении commit. Также покажет файлы с неразрешенными конфликтами слияния и файлы игнорируемые git
# git status On branch master No commits yet nothing to commit (create/copy files and use "git add" to track)
Добавляем файлы в проект и снова проверяем статус
# git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) file1.txt file2.txt nothing added to commit but untracked files present (use "git add" to track)
Добавляем в индекс(об этом ниже) и снова смотрим статус
# git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: file1.txt new file: file2.txt
GIT ADD
Добавляет содержимое рабочей директории в индекс (staging area) для последующего коммита
Внести в индекс - временное хранилище - изменения, которые затем войдут в коммит(без точки - из всей рабочей области, с точкой — только текущий путь)
# git add .
Внести в индекс - временное хранилище - изменения, которые затем войдут в коммит, включая новые файлы(без точки - из всей рабочей области, с точкой — только текущий путь)
# git add -A .
GIT COMMIT
Берёт все данные, добавленные в индекс с помощью git add, и сохраняет их слепок во внутренней базе данных, а затем сдвигает указатель текущей ветки на этот слепок
Выполняем коммит
# git commit -m "My initial commit. this is Version1.0" [master (root-commit) 5a354e7] My Initial commit. this is Version1.0 2 files changed, 2 insertions(+) create mode 100644 file1.txt create mode 100644 file2.txt
Изменение комментарий последнего коммита
# git commit --amend PATCH4 ---cut---
GIT LOG
Служит для просмотра изменений репозитория. По умолчанию, без аргументов, git log выводит список коммитов созданных в данном репозитории в обратном хронологическом порядке (самые последние коммиты показываются первыми
Вывести последний коммит
# git log -1 Author: Evgeny Onopriyko <finston1978@gmail.com> Date: Fri Jun 10 13:05:10 2016 +0300 Update default.rb
Подробная информация в виде патчей по файлам из коммитов
# git log -p diff --git a/files/default/backup-data-zappstore-eu.sh b/files/default/backup-data-zappstore-eu.sh new file mode 100755 index 0000000..0b6cd3b --- /dev/null +++ b/files/default/backup-data-zappstore-eu.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +DIR='/srv/www/zappstore/data/' +USER='deployer' +DS='172.16.2.41' +BACKUP_DIR='/var/lib/vz/storagebox2'
Вывод под каждым коммитом списка измененных файлов, количество измененных файлов, количество добавленных и удаленных строк в этих файлах и ниже краткую статистику по каждому коммиту
# git log --stat commit b5a1eff79966358fbb7e0affbb7974b26d9deb63 Author: Evgeny Onopriyko <finston1978@gmail.com> Date: Fri Jun 10 13:05:10 2016 +0300 update files/default/backup-data-zappstore-eu.sh | 9 +++++++++ files/default/backup-data-zappstore-us.sh | 9 +++++++++ files/default/backup-data-zapsptore.sh | 9 --------- metadata.rb | 2 +- recipes/cargo.rb | 2 +- recipes/zappstore.rb | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------ 6 files changed, 80 insertions(+), 35 deletions(-)
Вывод данных о каждом коммите в одну строку
# git log --pretty=oneline f3f7a446f58a245f5426fbf71790540148313e3f update 6df3a30e775995d311f30b3cc74a2ad2b59a6267 Update zappstore.rb 19c78b5a0b599ab2fb78c0e5b0b3ea812636536e Update default.rb
GIT CHECKOUT
Переключение между ветками, извлечение отдельных файлов из истории коммитов
Переключиться в ветку
# git checkout some-other-branch
Создать ветку и переключиться в неё
# git checkout -b some-other-new-branch
Вернуть файл из коммита
# git checkout HEAD files/default/backup-data-cargo.sh
Отменить изменения в untracked файле
# git checkout -- file.txt
Откатится к определённому коммиту
# git log commit 6f75c6169c7b079e93664a32bacecf7c93ee95c2 (HEAD) ---cut--- # git checkout 6f75c6169c7b079e93664a32bacecf7c93ee95c2
Вернуться назад
# git checkout master
GIT CLONE
Создание копии (удаленного) репозитория
Клонировать репозиторий с той же машины в директорию myrepo
# git clone /home/username/project /myrepo
Клонируем репозиторий через протокол git
# git clone git@gihub.com:/repo-name.git /myrepo
Клонируем репозиторий через ssh
# git clone ssh://git@github.com/repo-name /myrepo
Клонируем репозиторий через https
# git clone https://github.com/repo-name /myrepo
GIT PULL
Синхронизация текущей ветки с репозиторием
Забрать изменения из репозитория и слить с активной веткой
# git pull
Забрать изменения из определенного репозитория
# git pull project
GIT PUSH
Внесение изменений в удаленный репозиторий
Отправить изменения в удаленную ветку, созданную при клонировании по умолчанию
# git push
Отправить изменения из ветки master в ветку experimental удаленного репозитория
# git push ssh://github.com/project.git master:experimental
Отправить изменения в удаленную ветку master репозитория origin(синоним репозитория по умолчанию) из локальной ветки master
# git push origin master:master
Создать ветку в удалённом репозитории
# git push --set-upstream origin fix_error
Удалить ветку в удаленном репозитории
# git push origin --delete fix_error
GIT REMOTE
Имя удаленного репозитория
# git remote origin
Адрес удалённого репозитория
# git remote -v origin git@github.com:vasya/mysuperproject.git (fetch) origin git@github.com:vasya/mysuperproject.git (push)
Информация о удаленном репозитории
# git remote show origin
Изменить origin url удалённого репозитория
# git remote set-url origin git@gitlab.ru:SIP/Back.git
GIT BRANCH
Создание, перечисление и удаление веток
Добавить новую ветку
# git branch <имя_ветки>
Удалить ветку
# git branch -d <имя_ветки>
Переименование ветки
# git branch -m new-name-branch
Если в репозитории есть другие ветки, их можно увидеть так(активная ветка обозначена звёздочкой)
# git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/Stamps_zebra remotes/origin/master remotes/origin/standart_xlsx
GIT MERGE
Слияние веток
Cоединить ветку fix_error с master
# git checkout master # git merge fix_error Updating 7832e32..6f75c61 Fast-forward file1.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
GIT RESET
Удаление коммитов
Удаление коммита, файл останется последней версии, фактически стираем историю коммитов из git log
# git reset --soft HEAD~
Полное удаление коммита(HEAD~ означает "один коммит от последнего коммита", если надо удалить два последних коммита, то пишем HEAD~2)
# git reset --hard HEAD~