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

Материал из megapuper
Перейти к: навигация, поиск
 
(не показаны 23 промежуточные версии этого же участника)
Строка 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
  
  
Строка 220: Строка 242:
 
'''GIT REMOTE'''
 
'''GIT REMOTE'''
  
Имя удаленного репозитория
+
Список привязок к удалённым репозиториям
 
  # git remote
 
  # git remote
 
  origin
 
  origin
Строка 229: Строка 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
  
  
Строка 277: Строка 308:
 
Удаление коммитов
 
Удаление коммитов
  
 +
 +
Удалить файла из индекса и сбросить его содержимое до исходного состояния
 +
# git reset file.txt
  
 
Удаление коммита, файл останется последней версии, фактически стираем историю коммитов из git log
 
Удаление коммита, файл останется последней версии, фактически стираем историю коммитов из git log
Строка 283: Строка 317:
 
Полное удаление коммита(HEAD~ означает "один коммит от последнего коммита", если надо удалить два последних коммита, то пишем HEAD~2)
 
Полное удаление коммита(HEAD~ означает "один коммит от последнего коммита", если надо удалить два последних коммита, то пишем HEAD~2)
 
  # git reset --hard HEAD~
 
  # 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