Git для новичков
Гит — это такая система, которая позволяет в любой момент вернуться к любому прошлому состоянию вашего программного кода. Даже в случае удаления файлов, их можно найти и вернуть.
Более того, это — такая система, которая позволяет иметь только одну версию кода в настоящий момент.
Гит был написан создателем Линукс. В нём реализовано громадное количество различных алгоритмов использования. И при этом он стабильно работающий, но имеет не дружелюбный интерфейс для пользователей.
Git используется на всех реальных проектах разработки. Не зная Гит, в серьезных командах разработки делать нечего.
Для новичков есть специальная секция: http://try.github.io
В ней можно поиграть в Гит-песочнице, совмещенной с обучением:
https://learngitbranching.js.org
- git commit — создание коммита (снимка проекта).
- У каждого коммита есть свой родительский коммит.
- git branch newBranch — создание ветки (ссылки на определенный коммит).
- Ведение проекта следует организовывать именно через ветки.
- Ветка хранит набор коммитов и их родителей.
- Следует разбивать множество маленьких работ на множество не потребляющих памяти или места на диске веток.
- Звездочка рядом с названием ветки указывает на то, что сейчас используется именно эта ветка.
- git checkout [name] — выбор ветки.
- git merge newBranch — объединение изменений из 2х разных веток-родителей, а именно — из newBranch в Master (делается из master).
- Цель слияния — создать свою ветку, сделать необходимые изменения с помощью череды коммитов, и слить новый функционал с основным проектом.
- Основная ветка проекта называется master (открывается в проекте по умолчанию при его первоначальном создании).
- git rebase newBranch — копирование набора коммитов из одной ветки в другую.
- Используется для создания чистых красивых последовательностей коммитов, чтобы история коммитов делалась последовательно, хотя на самом деле — параллельно.
- Следует предварительно выбирать ветку, коммиты которой будут копироваться в другую ветку. Затем сделать rebase, выбрать ту ветку, в которую произошло копирование, и сделать rebase с уже ранее скопированной веткой.
- Перемещение по коммитам.
- git checkout master^ — перемещение на 1 коммит от текущего коммита,
- git checkout master^^ — перемещение на 2 коммита от текущего и т.д.,
- git checkout newBranch~4 — перемещение на 4 коммита вверх от текущего.
- Перемещение ветки.
- git branch -f master newBranch~4 — перемещение ветки master к коммиту на 3 родителя назад от newBranch.
- Отмена изменений.
- git reset — отменяет изменения, переносясь на предыдущий коммит, как будто текущего коммита и не было. Работает исключительно для локальных веток.
- git revert — отменяет изменения таким образом, чтобы всем пользователям была видна отмена изменений. Появляется новый коммит, который содержит противоположные изменения текущему коммиту. После следует ввести команду git push.
- git clone — создание копии удаленного репозитория на локальном компьютере, а также создании копии на удаленном репозитории с локального компьютера.
- в локальном репозитории появляется новая ветка с именем origin/master — копией удаленного репозитория, где origin/ — имя репозитория на удаленном сервере.
- git fetch — извлечение данных из удаленного репозитория.
- при этом команда не модифицирует ваш код и не сливает ветки воедино. Команда лишь скачивает необходимые данные, которые еще предстоит вручную слить с вашими данными.
- git pull — это скачивание и слияние удаленного кода с вашим.
- это — выполнение двух последовательных команд: git fetch & git merger origin/master.
- git fakeTeamwork [newBranch X]- инициализация псевдо коммита на удаленном сервере (будто этот коммит был сделан другим человеком).
- newBranch — имя ветки в которую добавляются коммиты.
- Х — число коммитов.
- git push — заливка своих изменений на удаленный репозиторий.
- если в удаленном репозитории есть расхождения — Гит не даст закачать только ваши изменения в репозиторий, он будет заставлять вас включать все существующие в самом репозитории изменения.
- в случае расхождений — следует перебазировать ваши наработки на самую последнюю версию удаленной ветки: git fetch; git rebase origin/master; git push. Или: git fetch; git merge origin/master; git push.
- перебазирование можно сделать и с помощью одной команды: git pull —rebase; git push (замещает две предыдущие команды из прошлого пункта: git fetch; git rebase origin/master и git fetch; git merge origin/master)
- Слияние фича-бранней (веток вне master).
- git branch -u original/master newBranch; git commit; git push — отслеживание удаленной ветки
Как добавить файлы в Гитхаб из консоли Макос?
- Заходим на GitHub.com и создаем удаленный репозиторий.
- Если пользуетесь десктопной версией, жмите кнопку «Set up in Desktop». В рамках статьи же создадим локальный репозиторий на локальном компьютере из консоли MacOS.
Команда в терминале | Описание |
echo «# homeworks» >> README.md | создаем файл README.md |
git init | инициализируем Гит в нужной папке |
git add README.md | добавляем README.md в локальный репозиторий |
git status | отображение текущего статуса |
git add —all | добавляем все файлы из категории в локальный репозиторий |
git status | |
git commit -m «first commit» | делаем 1й коммит в удаленный репозиторий. Commit = «точка на пути разработки». Сообщение к коммиту — это 50% работы. |
git status | |
git log | содержит в себе все сделанные на проекте коммиты. Каждый коммит имеет уникальный номер, автора и дату. |
git remote add origin https://github.com/Myatov/homeworks.git | добавление url репозитория на GitHub |
git push -u origin master | соединяем локальный и удаленный репозитории |
затем через Проводник: 1) создали папку Database 2) ряд файлов переместили в папку Database | |
git status | Your branch is up to date with ‘origin/master’. deleted: database_1.py deleted: database_1_var_2.py deleted: database_2.py deleted: database_3_parser_config.py deleted: database_3_parser_index.py deleted: database_4_analog_screaming_frog_seospider.py deleted: database_4_db.py Untracked files: (use «git add <file>…» to include in what will be committed) database/ |
git add —all | добавляем все файлы |
git status | Changes to be committed: renamed: database_1.py -> database/database_1.py renamed: database_1_var_2.py -> database/database_1_var_2.py renamed: database_2.py -> database/database_2.py renamed: database_3_parser_config.py -> database/database_3_parser_config.py renamed: database_3_parser_index.py -> database/database_3_parser_index.py renamed: database_4_analog_screaming_frog_seospider.py -> database/database_4_analog_screaming_frog_seospider.py renamed: database_4_db.py -> database/database_4_db.py |
git commit -m ‘Moves database files to Database category’ | Делаем коммит |
git log | commit 4391592dcec797e25d03a24cb0162ad9cd430771 (HEAD -> master) Author: Myatov <myatov@gmail.com> Date: Thu Mar 28 08:20:20 2019 +0300 Moves database files to Database category commit 43548e4b0499c779e5ef7a56e51648321323366f (origin/master) Author: Myatov <myatov@gmail.com> Date: Mon Mar 25 08:03:33 2019 +0300 first commit |