GIT

Материал из megapuper
Перейти к: навигация, поиск

.gitconfig

Конфигурация git

# git config --global user.name "Vasya Pupkin"
# git config --global user.email "vasya@mail.ru"
# git config --global core.editor nano
# git config --local commit.template template

Просмотр конфигурации

# 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 add . -p


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 commit --allow-empty -m "Пустой коммит"


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

Откатиться на один коммит назад от HEAD-последнего коммита текущей ветки(на два HEAD^^)

# git checkout HEAD^

Откатиться к определённому коммиту

# 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 FETCH


Забрать из удалённого репозитория отдельную ветку(следом надо выполнить - git checkout develop, тогда увидим ветку)

# git fetch origin develop


Забрать из удалённого репозитория отдельную ветку и присвоить ей новое имя

# git fetch origin develop:myOwnDevelop


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 remote add origin git@github.com:vasya/mysuperprojectnumberone.git

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

# git remote add new_origin git@github.com:vasya/mysuperprojectnumbertwo.git

Удалить привязку к удалённому репозиторию

# git remote remove new_origin


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 reset file.txt

Удаление коммита, файл останется последней версии, фактически стираем историю коммитов из git log

# git reset --soft HEAD~

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

# git reset --hard HEAD~


GIT TAG

Создание тегов


Создать новый тег(-a идентификатор тега, -m комментарий)

# git tag -a 0.1 -m "my first tag"


Перенос репы из одного репозитория в другой

git clone --bare git@server01.local:testrepo.git
cd testrepo.git && git fetch origin
git remote add new-origin git@server02.local:testrepo.git
git push --mirror new-origin
git remote rm origin && git remote rename new-origin origin