Git для новичков
Разработка

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 — отслеживание удаленной ветки

Как добавить файлы в Гитхаб из консоли Макос?

  1. Заходим на GitHub.com и создаем удаленный репозиторий.
  2. Если пользуетесь десктопной версией, жмите кнопку «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 statusYour 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 statusChanges 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 logcommit 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