Использование команд на практике
Подготовка Git:
- git congif -- global user.name “Your name” - указываем имя
- git config --global user.email “your_email@gmail.com” - и адрес электронной почты
Создание проекта:
- создаем каталог, переходи в него и создаем файл test.html
- git init - создаем git репозиторий из каталога
- git add test.html - добавляем страницу в репозиторий
- git commit -m “First commit” - коммитимся
- git status - проверяем текущее состояние репозитория
Внесение изменений:
- изменяем страничку test.html
- git status - и проверяем состояние рабочего каталога, git знает что произошло изменения в файле test.html и эти изменения еще не зафиксированные в репозитории
Индексация изменений:
- gid add test.html - проиндексируем изменения
- git status - проверяем состояние, git знает об изменении, но оно еще не записано в репозиторий
Git позволяет записывать изменения в малых коммитах, сначала нужно проиндексировать одну часть файлов и закоммитить, а потом следующую часть. Метка -m делает комментарий в командной строке
- git add first.html
- git add second.html
- git commit -m “First part”
- git add third.html
- git commit -m “Second part”
Git фокусируется на изменениях в файле, а не на самом файле. Когда происходит индексация файла, мы говорим, что git надо отметить текущее состояние файла, коммит которого будет выполнен позже.
- изменяем test.html страничку и проиндексируем
- обратно изменяем test.html страничку
- git status - проверяем состояние
Мы увидим, что у нас есть два состояния файла test.html - первое проиндексировано и готово к коммиту, а второе непроиндексированно. Если сделать коммит сейчас, то заголовки не сохранятся в репозиторие.
- git commit -m “added changes” - выполняем коммит проиндексированного изменения
- git status - проверяем состояние и видим, что test.html имеет незафиксированные изменения
- git add . - добавляем все изменения в файлы текущего каталога и все подкаталоги
- git status - проверяем состояние и видим, что все проиндексировано и готово к коммиту
- git commit - m “final changes”
Просмотр истории. Примеры команд для просмотра истории проекта:
- git log --pretty=oneline - однострочный формат
- git log --pretty=oneline --author=
; - git log --pretty=oneline --max-count=2
- git log --pretty=oneline --since=”5 minutes ago”
- git log --pretty=oneline --all
также можно определить свой формат вывода:
- git log --pretty=format" %h %ad | %s%d [%an]" --graph --date=short - указываем короткий хеш коммита, дату коммита, комментарий и тег, имя автора, отображение коммита в виде ASCII-графика, короткий формат даты
Использование алиасов - короткая форма команд, для применения нужно добавить след. сокращения в файл .config:
[alias]
lg = git log --pretty=format" %h %ad | %s%d [%an]" --graph --date=short
co = checkout
ci = commit
br = branch
Переключение между ветками:
[alias]
lg = git log --pretty=format" %h %ad | %s%d [%an]" --graph --date=short
co = checkout
ci = commit
br = branch
Переключение между ветками:
- git lg - получаем хешы всех предыдущих коммитов
- git checkout b816555 - используем полученный хеш чтобы вернуться к определенному состоянию
- git checkout master - возвращаемся к последней версии в ветке master
Создание тегов:
- git tag version1- создаем тег version1, текущая версия
- git tag version1^1 - переключаемся на пред. версию
- git tag version1-beta - создаем тег для новой версии
- git checkout version1-beta - переключаемся для другую ветку
- git tag - просмотр доступных тегов
- git lg master --all - просмотр тегов в логе
Отмена локальных изменений, до индексации:
- git checkout master - убеждаемся, что мы находимся на последнем коммите ветки
- git checkout test.html - отмена изменений
Отмена проиндексированных изменений, до коммитов:
вносим изменения в файл test.html и проиндексируем изменение
вносим изменения в файл test.html и проиндексируем изменение
- git add test.html
- git reset HEAD test.html - очищаем буферную зону от изменений, но reset не изменяет рабочий каталог, т.е. рабочий каталог содержит изменения
- git checkout test.html - удаляем изменения
если все прошло успешно, то после выполнения команды git status выведет “nothing to commit (working directory clean)”
Отменна коммитов:
вносим изменения в файл test.html и коммитим
вносим изменения в файл test.html и коммитим
- git revert HEAD --no-edit - выполняем отмену последнего произведенного коммита
- git lg - проверяем историю коммитов
также возможно отменять коммит по это хеш-значению
Удаление ошибочного коммита из ветки:
Удаление ошибочного коммита из ветки:
- git lg - при выполнении команды можно увидеть два последних коммита
давайте уберем неправильный коммит и сделаем вид, что его никогда не было, для этого:
- git tag wrong - отмечаем последний коммит тегом
- git reset --hard v1 - сброс коммита к предшествующему коммиту и указываем, что рабочий каталог должен быть обновлен в соответствии с новым head ветки
- git lg --all - видим, что ошибочные коммиты присутствуют в репозитории, но отсутствуют в ветке master
- git tag -d wrong - удаляем тег wrong и коммиты на которые он ссылался, сборщиком мусора
после проверки(git lg --all) видим, что тег wrong не отображается в репозитории
Внесение изменений в коммиты:
создадим новую ветку и перейдем в нее
перейдем в ветку resources и выполним слияние master с resources
Выполним в ветке master изменения, перейдем в ветку resources и попытаемся ее обьединить с новой веткой master.
- вносим изменения в файл test.html и коммитим
- git add test.html
- git commit -m “author comment was added”
- вносим изменения в файл test.html
- git add test.html
- git commit --amend -m “author and e-mail comment was added”
После просмотра истории(git lg) видим, что оригинальный коммит был изменен.
Работа с обьектами Git:- git lg --max-count=1 - выводим последний коммит
- git cat-file -p e1d1489 - выводим обьект коммита из главной ветки master
tree 771a1209c66c0e9210914aa5edc58e011d3158a2
parent 6d10a74c12ac34f5762cffc6a05acf424faefb8c
author Dmitry Nikolaenko 1312139846 +0300
committer Dmitry Nikolaenko 1312139846 +0300
index.html was added- git cat-file -p 771a1209c - выводим дерево каталогов
- git cat-file -p 100644 - вывод файла по хешу из дерева
создадим новую ветку и перейдем в нее
- git branch resources
- git checkout resources
- git checkout master - перейдем в master
- cat lib/test.html - видим, что test.html не использует стили style.css, т.к. изменения были выполнены в ветке resources
перейдем в ветку resources и выполним слияние master с resources
- git checkout resources
- git merge master
- git lg --all
Выполним в ветке master изменения, перейдем в ветку resources и попытаемся ее обьединить с новой веткой master.
- git checkout resources
- git merger master
Auto-merging lib/test.html
CONFLICT (content): Merge conflict in lib/test.html
Automatic merge failed; fix conflicts and then commit the result.
Конфликт нужно решить вручную, проиндексировать и закоммитить.
Сброс ветки и преобразование:- git checkout resources
- git reset --hard 9bf1954 - сброс ветки resources до момента слияния
- git checkout master
- git reset --hard 73cb08c - сброс ветки master до конфликтующего коммита
- git checkout resources
- git rebase master
- git checkout master
- git merge resources - слияние resources в master, теперь ветки идентичны
- git clone test cloned_test - создаем клон репозитория
- git remote show origin - смотрим информац. об имени по умолчанию и видим, что оригинальным репозиторием является test
- git branch -a - выводим список всех веток, но оказывается, что ветки в удаленном репозитории не рассматриваются как локальные и по этому нам придется создать ее вручную. Для этого:
- cd ../test - перейдем в репоз. test
- cd ../cloned_test - переходим в клонированную версию главного репозитория
- git fetch - извлекаем изменения из удаленного репозитория(выполняется без слияния в локальных ветках)
- git merge origin/master - перемещаем извлеченные изменения в текущую ветку и рабочий каталог
Комментариев нет:
Отправить комментарий