GIT — различия между версиями
Root (обсуждение | вклад) |
Root (обсуждение | вклад) |
||
(не показаны 73 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | '''git add'''<br/> | + | '''.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'''<br/> | ||
+ | |||
+ | Создание локального репозитория | ||
+ | |||
+ | |||
+ | Команда git init создает в директории пустой репозиторий в виде директории .git, где и будет в дальнейшем храниться вся информация об истории коммитов, тегах, ходе разработки проекта | ||
+ | # mkdir myproject | ||
+ | # cd project | ||
+ | # git init | ||
+ | |||
+ | |||
+ | '''GIT STATUS'''<br/> | ||
+ | |||
+ | Текущее состояние индекса. | ||
+ | |||
+ | |||
+ | Можно увидеть какие будут произведены изменения при применении 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) | ||
+ | |||
+ | <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> | ||
+ | |||
+ | |||
+ | '''GIT ADD'''<br/> | ||
Добавляет содержимое рабочей директории в индекс (staging area) для последующего коммита | Добавляет содержимое рабочей директории в индекс (staging area) для последующего коммита | ||
+ | |||
Внести в индекс - временное хранилище - изменения, которые затем войдут в коммит('''без точки - из всей рабочей области, с точкой — только текущий путь''') | Внести в индекс - временное хранилище - изменения, которые затем войдут в коммит('''без точки - из всей рабочей области, с точкой — только текущий путь''') | ||
Строка 7: | Строка 73: | ||
Внести в индекс - временное хранилище - изменения, которые затем войдут в коммит, включая новые файлы('''без точки - из всей рабочей области, с точкой — только текущий путь''') | Внести в индекс - временное хранилище - изменения, которые затем войдут в коммит, включая новые файлы('''без точки - из всей рабочей области, с точкой — только текущий путь''') | ||
− | # git add -A | + | # git add . -A |
+ | Внесение изменений в интерактивном режиме. Можно выбрать какое изменение коммитить, а какое нет(например из двух изменённых файлов, закоммитить только один). Есть возможность проверить разницу перед добавлением измененного содержимого в индекс | ||
+ | # git add . -p | ||
− | |||
− | + | '''GIT COMMIT'''<br/> | |
− | |||
− | |||
− | + | Берёт все данные, добавленные в индекс с помощью 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 -m " | + | # git commit --allow-empty -m "Пустой коммит" |
− | ''' | + | '''GIT LOG'''<br/> |
Служит для просмотра изменений репозитория. По умолчанию, без аргументов, 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' | ||
Вывод под каждым коммитом списка измененных файлов, количество измененных файлов, количество добавленных и удаленных строк в этих файлах и ниже краткую статистику по каждому коммиту | Вывод под каждым коммитом списка измененных файлов, количество измененных файлов, количество добавленных и удаленных строк в этих файлах и ниже краткую статистику по каждому коммиту | ||
Строка 58: | Строка 148: | ||
− | '''git | + | '''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 | ||
+ | |||
+ | |||
+ | '''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 | # 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 удалённого репозитория | ||
+ | # 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 branch <имя_ветки> | ||
+ | |||
+ | Удалить ветку | ||
+ | # git branch -d <имя_ветки> | ||
+ | |||
+ | Переименование ветки | ||
+ | # git branch -m new-name-branch | ||
− | + | Если в репозитории есть другие ветки, их можно увидеть так(активная ветка обозначена звёздочкой) | |
− | # git | + | # 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