GIT — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
 
(не показано 48 промежуточных версий этого же участника)
Строка 4: Строка 4:
 
  # git config --global user.name "Vasya Pupkin"
 
  # git config --global user.name "Vasya Pupkin"
 
  # git config --global user.email "vasya@mail.ru"
 
  # git config --global user.email "vasya@mail.ru"
 +
# git config --global core.editor nano
 +
# git config --local commit.template template
  
 
Просмотр конфигурации
 
Просмотр конфигурации
Строка 13: Строка 15:
 
'''GIT INIT'''<br/>
 
'''GIT INIT'''<br/>
  
Создание репозитория
+
Создание локального репозитория
  
  
Строка 26: Строка 28:
 
Текущее состояние индекса.
 
Текущее состояние индекса.
  
Можно увидеть какие будут произведены изменения при применении commit. Также покажет файлы с неразрешенными конфликтами слияния и файлы игнорируемые git
+
 
 +
Можно увидеть какие будут произведены изменения при применении commit. Также покажет файлы с неразрешенными конфликтами слияния и файлы игнорируемые git
 
  # git status
 
  # git status
 
  On branch master
 
  On branch master
Строка 33: Строка 36:
 
   
 
   
 
  nothing to commit (create/copy files and use "git add" to track)
 
  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)
 +
 +
<font color=red>file1.txt</font>
 +
<font color=red>file2.txt</font>
 +
 +
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)
 +
 +
<font color=green>new file:  file1.txt</font>
 +
<font color=green>new file:  file2.txt</font>
  
  
Строка 44: Строка 73:
  
 
Внести в индекс - временное хранилище - изменения, которые затем войдут в коммит, включая новые файлы('''без точки - из всей рабочей области, с точкой — только текущий путь''')
 
Внести в индекс - временное хранилище - изменения, которые затем войдут в коммит, включая новые файлы('''без точки - из всей рабочей области, с точкой — только текущий путь''')
  # git add -A .
+
  # git add . -A
  
 +
Внесение изменений в интерактивном режиме. Можно выбрать какое изменение коммитить, а какое нет(например из двух изменённых файлов, закоммитить только один). Есть возможность проверить разницу перед добавлением измененного содержимого в индекс
 +
# git add . -p
  
'''GIT BRANCH'''<br/>
 
  
Создание, перечисление и удаление веток
+
'''GIT COMMIT'''<br/>
  
 +
Берёт все данные, добавленные в индекс с помощью git add, и сохраняет их слепок во внутренней базе данных, а затем сдвигает указатель текущей ветки на этот слепок
  
Добавить новую ветку
 
# git branch <имя_ветки>
 
  
Удалить ветку
+
Выполняем коммит
  # git branch -d <имя_ветки>
+
  # 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 branch -m new-name-branch
+
  # git commit --amend
 +
PATCH4
 +
---cut---
  
Если в репозитории есть другие ветки, их можно увидеть так(активная ветка обозначена звёздочкой)
+
Пустой коммит
  # git branch -a
+
  # git commit --allow-empty -m "Пустой коммит"
* master
 
  remotes/origin/HEAD -> origin/master
 
  remotes/origin/Stamps_zebra
 
  remotes/origin/master
 
  remotes/origin/standart_xlsx
 
  
  
'''GIT CHECKOUT'''
+
'''GIT LOG'''<br/>
  
Переключение между ветками, извлечение отдельных файлов из истории коммитов
+
Служит для просмотра изменений репозитория. По умолчанию, без аргументов, git log выводит список коммитов созданных в данном репозитории в обратном хронологическом порядке (самые последние коммиты показываются первыми
  
  
Переключиться в ветку
+
Вывести последний коммит
  # git checkout some-other-branch
+
  # git log -1
 
+
  Author: Evgeny Onopriyko <finston1978@gmail.com>
Создать ветку и переключиться в неё
+
  Date:  Fri Jun 10 13:05:10 2016 +0300
  # git checkout -b some-other-new-branch
+
   
 
+
  Update default.rb
Вернуть файл из коммита
 
# git checkout HEAD files/default/backup-data-cargo.sh
 
 
 
 
 
'''GIT CLONE'''<br/>
 
 
 
Создание копии (удаленного) репозитория
 
 
 
 
 
Клонировать репозиторий с той же машины в директорию 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 COMMIT'''<br/>
 
 
 
Берёт все данные, добавленные в индекс с помощью git add, и сохраняет их слепок во внутренней базе данных, а затем сдвигает указатель текущей ветки на этот слепок
 
 
 
 
 
Выполняет коммит
 
  # git commit -m "комментарий"
 
 
 
 
 
'''GIT LOG'''<br/>
 
 
 
Служит для просмотра изменений репозитория. По умолчанию, без аргументов, git log выводит список коммитов созданных в данном репозитории в обратном хронологическом порядке (самые последние коммиты показываются первыми
 
  
 
Подробная информация в виде патчей по файлам из коммитов
 
Подробная информация в виде патчей по файлам из коммитов
Строка 150: Строка 146:
 
  6df3a30e775995d311f30b3cc74a2ad2b59a6267 Update zappstore.rb
 
  6df3a30e775995d311f30b3cc74a2ad2b59a6267 Update zappstore.rb
 
  19c78b5a0b599ab2fb78c0e5b0b3ea812636536e Update default.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'''<br/>
 +
 +
Создание копии (удаленного) репозитория
 +
 +
 +
Клонировать репозиторий с той же машины в директорию 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
  
  
Строка 162: Строка 206:
 
Забрать изменения из определенного репозитория
 
Забрать изменения из определенного репозитория
 
  # git pull project
 
  # git pull project
 +
 +
 +
'''GIT FETCH'''
 +
 +
 +
Забрать из удалённого репозитория отдельную ветку(следом надо выполнить - git checkout develop, тогда увидим ветку)
 +
# git fetch origin develop
 +
 +
 +
Забрать из удалённого репозитория отдельную ветку и присвоить ей новое имя
 +
# git fetch origin develop:myOwnDevelop
  
  
Строка 174: Строка 229:
 
Отправить изменения из ветки master в ветку experimental удаленного репозитория
 
Отправить изменения из ветки master в ветку experimental удаленного репозитория
 
  # git push ssh://github.com/project.git master:experimental
 
  # git push ssh://github.com/project.git master:experimental
 
В удаленном репозитории origin удалить ветку experimental
 
# git push origin :experimental
 
  
 
Отправить изменения в удаленную ветку master репозитория origin(синоним репозитория по умолчанию) из локальной ветки master
 
Отправить изменения в удаленную ветку master репозитория origin(синоним репозитория по умолчанию) из локальной ветки master
 
  # git push origin master:master
 
  # git push origin master:master
 +
 +
Создать ветку в удалённом репозитории
 +
# git push --set-upstream origin fix_error
 +
 +
Удалить ветку в удаленном репозитории
 +
# git push origin --delete fix_error
  
  
 
'''GIT REMOTE'''
 
'''GIT REMOTE'''
  
Имя удаленного репозитория
+
Список привязок к удалённым репозиториям
 
  # git remote
 
  # git remote
 
  origin
 
  origin
  
Информация о удаленном репозитории
+
Адрес удалённого репозитория
 +
# git remote -v
 +
origin git@github.com:vasya/mysuperproject.git (fetch)
 +
origin git@github.com:vasya/mysuperproject.git (push)
 +
 
 +
Информация о удалённом репозитории
 
  # git remote show origin
 
  # git remote show origin
  
 
Изменить origin url удалённого репозитория
 
Изменить origin url удалённого репозитория
 
  # git remote set-url origin git@gitlab.ru:SIP/Back.git
 
  # 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'''<br/>
  # git show
+
 
commit b5a1eff79966358fbb7e0affbb7974b26d9deb63
+
Создание, перечисление и удаление веток
  Author: Evgeny Onopriyko <finston1978@gmail.com>
+
 
Date:  Fri Jun 10 13:05:10 2016 +0300
+
 
    update
+
Добавить новую ветку
  diff --git a/files/default/backup-data-zappstore-eu.sh b/files/default/backup-data-zappstore-eu.sh
+
  # git branch <имя_ветки>
new file mode 100755
+
 
  index 0000000..0b6cd3b
+
Удалить ветку
  --- /dev/null
+
  # git branch -d <имя_ветки>
  +++ b/files/default/backup-data-zappstore-eu.sh
+
 
  @@ -0,0 +1,9 @@
+
Переименование ветки
  +#!/bin/bash
+
  # 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'''<br/>
 +
 
 +
Слияние веток
 +
 
 +
 
 +
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"
 +
 
 +
 
 +
Перенос репы из одного репозитория в другой<br>
 +
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

Текущая версия на 23:27, 30 ноября 2023

.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