GIT — различия между версиями
Root (обсуждение | вклад) |
Root (обсуждение | вклад) |
||
(не показано 27 промежуточных версий этого же участника) | |||
Строка 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/> | ||
− | Создание репозитория | + | Создание локального репозитория |
Строка 71: | Строка 73: | ||
Внести в индекс - временное хранилище - изменения, которые затем войдут в коммит, включая новые файлы('''без точки - из всей рабочей области, с точкой — только текущий путь''') | Внести в индекс - временное хранилище - изменения, которые затем войдут в коммит, включая новые файлы('''без точки - из всей рабочей области, с точкой — только текущий путь''') | ||
− | # git add -A . | + | # git add . -A |
+ | |||
+ | Внесение изменений в интерактивном режиме. Можно выбрать какое изменение коммитить, а какое нет(например из двух изменённых файлов, закоммитить только один). Есть возможность проверить разницу перед добавлением измененного содержимого в индекс | ||
+ | # git add . -p | ||
Строка 90: | Строка 95: | ||
PATCH4 | PATCH4 | ||
---cut--- | ---cut--- | ||
+ | |||
+ | Пустой коммит | ||
+ | # git commit --allow-empty -m "Пустой коммит" | ||
Строка 157: | Строка 165: | ||
# git checkout -- file.txt | # git checkout -- file.txt | ||
− | + | Откатиться на один коммит назад от HEAD-последнего коммита текущей ветки(на два HEAD^^) | |
+ | # git checkout HEAD^ | ||
+ | |||
+ | Откатиться к определённому коммиту | ||
# git log | # git log | ||
commit 6f75c6169c7b079e93664a32bacecf7c93ee95c2 (HEAD) | commit 6f75c6169c7b079e93664a32bacecf7c93ee95c2 (HEAD) | ||
Строка 195: | Строка 206: | ||
Забрать изменения из определенного репозитория | Забрать изменения из определенного репозитория | ||
# git pull project | # git pull project | ||
+ | |||
+ | |||
+ | '''GIT FETCH''' | ||
+ | |||
+ | |||
+ | Забрать из удалённого репозитория отдельную ветку(следом надо выполнить - git checkout develop, тогда увидим ветку) | ||
+ | # git fetch origin develop | ||
+ | |||
+ | |||
+ | Забрать из удалённого репозитория отдельную ветку и присвоить ей новое имя | ||
+ | # git fetch origin develop:myOwnDevelop | ||
Строка 207: | Строка 229: | ||
Отправить изменения из ветки master в ветку experimental удаленного репозитория | Отправить изменения из ветки master в ветку experimental удаленного репозитория | ||
# git push ssh://github.com/project.git master:experimental | # git push ssh://github.com/project.git master: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 | ||
Строка 226: | Строка 251: | ||
origin git@github.com:vasya/mysuperproject.git (push) | 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 | ||
Строка 268: | Строка 302: | ||
file1.txt | 3 +-- | file1.txt | 3 +-- | ||
1 file changed, 1 insertion(+), 2 deletions(-) | 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