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

Материал из megapuper
Перейти к: навигация, поиск
Строка 283: Строка 283:
 
Удаление коммитов
 
Удаление коммитов
  
 +
 +
Удалить файла из индекса и сбросить его содержимое до исходного состояния
 +
# git reset file.txt
  
 
Удаление коммита, файл останется последней версии, фактически стираем историю коммитов из git log
 
Удаление коммита, файл останется последней версии, фактически стираем историю коммитов из git log

Версия 17:30, 9 февраля 2021

.gitconfig

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

# git config --global user.name "Vasya Pupkin"
# git config --global user.email "vasya@mail.ru"

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

# 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

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

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