Git — обзор на высоком уровне

Что такое GIT?

Git — это бесплатная распределенная система контроля версий с открытым исходным кодом для отслеживания изменений в компьютерных файлах, которая используется для координации работы нескольких людей над проектом и отслеживания прогресса во времени. Другими словами, это инструмент, облегчающий управление исходным кодом при разработке программного обеспечения.

Git помогает как программистам, так и нетехническим пользователям, отслеживая файлы их проектов. Он позволяет нескольким пользователям работать вместе и эффективно обрабатывать большие проекты.

Что вы понимаете под термином «система контроля версий»?

Система контроля версий (СКВ) записывает все изменения, внесенные в файл или набор данных, так что при необходимости к определенной версии можно обратиться позже.

Это помогает убедиться, что все члены команды работают над последней версией файла.

Применение Git

  • Git используется для отслеживания изменений в исходном коде.
  • Инструмент распределенного контроля версий, используемый для управления исходным кодом.
  • Позволяет нескольким разработчикам работать вместе.
  • Поддерживает нелинейную разработку благодаря тысячам параллельных ветвей.

Особенности Git

  • Бесплатный и с открытым исходным кодом
  • Отслеживает историю
  • Поддерживает нелинейную разработку
  • Создает резервные копии
  • Масштабируемый
  • Поддерживает совместную работу
  • Ветвление стало проще
  • Распределенная разработка.

Рабочий процесс Git

На следующем изображении показана диаграмма рабочего процесса git:

В Git рабочий процесс в основном делится на три области.

  • Рабочая директория — Это область, в которой вы изменяете существующие файлы.
  • Область постановки (Index) — В ней файлы в рабочей директории ставятся на хранение и добавляются снимки.
  • Git-каталог или репозиторий — В основном это место, где вы выполняете все изменения, которые должны быть сделаны, т.е. выполняете коммиты в ветку, проверяете ветку, вносите изменения и т.д.

Git Init

git init — это один из способов начать новый проект с помощью Git. Чтобы создать репозиторий, используйте либо git init, либо git clone — не оба.

git init
Вход в полноэкранный режим Выход из полноэкранного режима

Git Clone

  • git clone — это команда, которая используется для клонирования или копирования целевого репозитория.
git clone <REPO_URL>
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Клонировать определенную ветку из репозитория.
git clone -b <Branch_name> <Repo_URL>
Войти в полноэкранный режим Выйти из полноэкранного режима

Статус git

git status в основном используется для отображения состояния области постановки и репозитория. Он помогает нам отслеживать все сделанные изменения, указывать на неотслеживаемые файлы.

git status
Войти в полноэкранный режим Выйти из полноэкранного режима

Git Add

Команда git add добавляет новые или измененные файлы из вашей рабочей директории в область хранения Git.

git add является важной командой — без нее ни один git commit никогда ничего не сделает.

git add <file_name>or<path>
Вход в полноэкранный режим Выход из полноэкранного режима

Чтобы добавить все изменения

git add .
Войдите в полноэкранный режим Выйти из полноэкранного режима

Git Commit

Git commit используется для записи всех изменений в хранилище. Команда git commit фиксирует все изменения и создает для них commit-id для отслеживания внесенных изменений, как показано на рисунке ниже.

Как показано на рисунке, команда git commit создает commit-id для отслеживания изменений и фиксирует все изменения в git-репозитории.

Команда:

git commit
git commit -m
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Параметр -m вместе с командой позволяет нам написать сообщение о фиксации в командной строке.

Команда:

git commit -m "Commit message"
git commit -am
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Параметр -am вместе с командой позволяет записать сообщение о фиксации в командной строке для уже поставленных файлов.

Команда:

git commit -am "Commit message"
git commit -amend
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Команда amend используется для редактирования последнего коммита. Если нужно изменить последнее сообщение о фиксации, можно использовать эту команду.

Команда:

git commit -amend
Войти в полноэкранный режим Выйти из полноэкранного режима
  • rm означает «удалить». Она используется для удаления коллекции файлов. Команда git rm используется для удаления файлов из рабочего дерева и индекса.

Команда:

git rm <file_name>
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь, если вы используете команду git status, она покажет, что файл был удален.

Ветвление в Git

  • Ветвь в Git’е используется для хранения ваших изменений до тех пор, пока они не будут готовы.
  • Вы можете выполнять свою работу в ветке, пока основная ветка (main) остается стабильной. После завершения работы вы можете объединить ее с основной веткой.

  • Для создания новой ветки используется следующая команда :

git branch <branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Для перехода из одной ветки в другую.
git checkout <branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Создание локального филиала и переключение на этот филиал:
git checkout -b <branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Вставьте локальный филиал:
git push -u origin <branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима

Примечание: origin — это имя удаленного хранилища по умолчанию.

  • Теперь, если кто-то захочет получить какую-то информацию, можно просто выполнить команду:
git fetch
Войти в полноэкранный режим Выйти из полноэкранного режима

Удаление ветвей

После того, как работа над веткой завершена и она слита с основной веткой, ветку можно удалить.

  • Для удаления ветвей используется следующая команда:
git delete -d <branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима

Примечание: Эта команда удаляет копию ветви, но оригинальная ветвь может по-прежнему существовать в удаленных репозиториях.

  • Чтобы удалить удаленные ветки, используйте следующую команду:
git push origin --delete <branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима

Git Checkout

Git checkout используется для того, чтобы дать команду Git’у, на какой ветке должны быть сделаны изменения. Checkout просто используется для изменения ветвей в репозиториях. Он также может быть использован для восстановления файлов.

git checkout <branch_name>
Вход в полноэкранный режим Выход из полноэкранного режима
  • Git Checkout BranchЧтобы проверить или создать ветку, можно использовать следующую команду:
git checkout -b  <branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима

Это просто переключит на новую ветку branch_name.

  • Git Checkout TagПри работе над большой кодовой базой очень важно иметь некую точку отсчета. Именно здесь используется тег checkout.

Следующая команда используется для указания имени метки, а также ветки, которая будет проверяться.

git checkout tag</tag> <branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима

Git Merge

Git merge — это команда, позволяющая объединять ветки из Git. При этом сохраняется полная история и хронологический порядок, а также поддерживается контекст ветви.

Следующее изображение демонстрирует, как мы можем создавать различные функции путем ответвления от основной ветки и как мы можем объединить вновь созданные функции после окончательного просмотра с основной веткой.

  • Для слияния ветвей используется команда git merge.

Команда

git merge <branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима

GIT Rebase

Git Rebase — это процесс объединения последовательности коммитов в новый базовый коммит.

  • Основной причиной для перебазирования является сохранение линейной истории проекта.
  • При ребазинге вы «отсоединяете» ветку и «подключаете» ее к другой ветке (обычно главной).
  • Цель rebase — взять все коммиты из функциональной ветви и поместить их в основную ветвь.

Для переноса коммитов используется следующая команда rebase:

git rebase <branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима

Git Push

Команда git push используется для загрузки содержимого локального репозитория в удаленный репозиторий. Pushing — это способ передачи фиксаций из локального репозитория в удаленный репозиторий.

git push <remote> <branch>
Войти в полноэкранный режим Выйти из полноэкранного режима

Переместите указанную ветку в , вместе со всеми необходимыми коммитами и внутренними объектами. Это создаст локальную ветвь в целевом хранилище. Чтобы предотвратить перезапись коммитов, Git не позволит вам выполнить push, если это приведет к небыстрому слиянию в целевом хранилище.

git push <remote> --force
Вход в полноэкранный режим Выйти из полноэкранного режима

То же самое, что и вышеприведенная команда, но принудительно выполнить push, даже если это приведет к небыстрому слиянию. Не используйте флаг —force, если вы не уверены, что знаете, что делаете.

git push <remote> --all
Войти в полноэкранный режим Выход из полноэкранного режима

Переместить все ваши локальные ветки на указанное удаленное место.

git push <remote> --tags
Войти в полноэкранный режим Выйти из полноэкранного режима

Теги не передаются автоматически, когда вы перемещаете ветку или используете опцию —all. Флаг —tags отправляет все ваши локальные теги в удаленный репозиторий.

Git Fetch

Git Fetch загружает только последние изменения в локальный репозиторий. Он загружает свежие изменения, которые другие разработчики поместили в удаленный репозиторий с момента последней выборки, и позволяет вам просмотреть и объединить их вручную позже с помощью Git Merge. Поскольку он не изменяет рабочий каталог или область хранения, его использование безопасно.

На рисунке ниже показана работа команды git fetch. Она получает все последние изменения, внесенные в удаленный репозиторий, и позволяет нам внести соответствующие изменения.

Используется команда :

git fetch <branch_name>
Войти в полноэкранный режим Выйти из полноэкранного режима

Git Pull Remote Branch

Вы можете перетащить все изменения, которые были сделаны в удаленном хранилище с форком, в локальный репозиторий.

С помощью команды git pull все изменения и содержимое могут быть получены из удаленного репозитория и немедленно обновлены в локальном репозитории в соответствии с содержимым.

  • Мы можем просто извлечь удаленный репозиторий с помощью команды git pull. Синтаксис команды следующий:
git pull
Войти в полноэкранный режим Выйти из полноэкранного режима

Эта команда эквивалентна

git fetch origin head
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Используйте следующую команду, чтобы проверить, произошли ли какие-либо изменения:
git pull <RemoteName> <BranchName>
Ввести полноэкранный режим Выйти из полноэкранного режима

Если изменений нет, будет показано «Already up to date». В противном случае, эти изменения будут просто объединены в локальном репозитории.

Git Stash

Иногда в больших кодовых базах могут возникнуть ситуации, когда мы не хотим фиксировать наш код, но в то же время не хотим потерять незаконченный код. В этом случае на помощь приходит git stash. Команда git stash используется для записи текущего состояния рабочего каталога и индекса в тайник.

Она сохраняет незаконченный код в тайнике и очищает текущую ветку от всех незафиксированных изменений. Теперь мы можем работать с чистым рабочим каталогом.

Если в будущем нам снова понадобится обратиться к этому коду, мы можем просто воспользоваться тайником и применить эти изменения обратно в рабочий репозиторий.

Как показано ниже, используя команду git stash, мы можем временно сохранить изменения, внесенные в рабочую копию, и работать над чем-то другим. Позже, когда понадобится, мы можем git stash pop и снова начать работу над ним.

Как сохранить изменения в Git?

  • Синтаксис для сохранения изменений следующий:
git stash
Войти в полноэкранный режим Выйти из полноэкранного режима

Предположим, вы работаете над сайтом, и код хранится в репозитории.

Допустим, у вас есть несколько файлов с именами design.css и design.js. Теперь вы хотите припрятать эти файлы, чтобы использовать их позже, пока вы работаете над чем-то другим.

Поэтому позже вы можете использовать команду git stash list для просмотра всех изменений.

Удаление тайника

  • Если вам больше не нужен тайник, вы можете удалить его с помощью следующей команды:
git stash drop <stash_id>
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Если вы хотите удалить все тайники, просто используйте:
git stash clear
Войти в полноэкранный режим Выйти из полноэкранного режима

Git-Ignore

Иногда есть файлы, которые мы хотим, чтобы Git игнорировал при комментировании. Например, личные файлы или папки, содержащие пароли, API и т.д. Эти файлы зависят от пользователя, поэтому мы можем игнорировать их с помощью .gitignore.

.gitignore генерируется автоматически внутри каталога проекта и игнорирует файлы, которые будут зафиксированы в репозиториях.

  • Как использовать .gitignore?

Выполните следующие шаги, чтобы добавить файлы, которые вы хотите, чтобы Git игнорировал.

  1. Откройте каталог вашего проекта на компьютере.
  2. Создайте в нем файл .gitignore.
  3. Внутри .gitignore напишите имена всех файлов, которые вы хотите, чтобы Git игнорировал.
  4. Теперь добавьте .gitignore в ваш репозиторий.

Теперь, если вы проверите статус вашего репозитория, вы увидите, что все файлы, которые были записаны в файле .gitignore, были проигнорированы.

Расширенные концепции Git

git pull —rebase

Git rebase используется для перезаписи коммитов из одной ветки в другую. Для того чтобы объединить неопубликованные локальные изменения с опубликованными удаленными изменениями, выполняется git pull.

При использовании git pull —rebase неопубликованные изменения будут снова применены к опубликованным изменениям, и новый коммит не будет добавлен в историю.

git merge —squash

Squash вместе с git merge создает рабочее дерево. Оно индексирует так же, как и настоящее слияние, но отбрасывает историю слияния.

Команда:

git merge --squash origin/main
Войти в полноэкранный режим Выйти из полноэкранного режима

Когда использовать git merge —squash?

  • Когда вы слили основную часть в свою ветку и разрешили конфликты.
  • Когда вам нужно перезаписать исходные коммиты.

git reflog

Рефлог записывает каждое изменение, внесенное в хранилище. Кроме того, если какая-то ветка потеряна из репозитория, ее можно восстановить с помощью этой команды.

git revert

Revert означает просто отменить изменения. Таким образом, это команда отмены изменений в Git. В отличие от традиционной операции отмены, команда revert не удаляет никаких данных. git revert — это операция фиксации, так как она отменяет указанную фиксацию.

Опции:

  • Эта опция используется для отмены фиксации.
git revert <commit_id>
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Редактировать сообщение фиксации перед возвратом фиксации:В случае, если мы хотим отредактировать сообщение фиксации перед возвратом, для этого используется опция -e.
git revert -e <commit_id>
Войти в полноэкранный режим Выйти из полноэкранного режима

git bisect

Git bisect — это инструмент git, используемый для отладки. Предположим, у вас большая база кода, и какой-то коммит вызывает ошибку, но вы не уверены, какой именно коммит её вызывает.

Git bisect просматривает все предыдущие коммиты и использует двоичный поиск, чтобы найти коммит с ошибкой.

Он применяется следующим образом:

  1. git bisect start — Запускает биссектрису
  2. git bisect good v1.0 — Упоминание последнего рабочего коммита.
  3. git bisect bad — Упоминание о том, что в текущем коммите есть ошибка. Он вернёт коммит, который вызвал ошибку, и можно будет эффективно отладить проблему.

git blame

git blame используется для того, чтобы узнать, кто/какой коммит ответственен за последние изменения в хранилище. Здесь можно увидеть автора/коммит каждой строки.

git blame <file_name>
Войти в полноэкранный режим Выйти из полноэкранного режима

Эта команда показывает коммиты, ответственные за изменения всех строк кода.

git cherry-pick

Выбор коммита из одной ветки и применение его в другой ветке известно как cherry picking в Git. Ниже описаны шаги для выбора фиксации:

  • Посетите ветку, к которой вы хотите применить коммит, и выполните следующую команду:
 git switch master
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Выполните следующую команду:
git cherry-pick <commit_id>
Войти в полноэкранный режим Выйти из полноэкранного режима

Субмодули Git

Субмодули — это инструмент, который позволяет присоединить внешний репозиторий внутри другого репозитория по определенному пути. Это позволяет нам держать git-репозиторий в качестве подкаталога другого git-репозитория.

Команды:

  • Добавить git-подмодуль: Принимает git URL в качестве параметра и клонирует указатель репозитория в качестве подмодуля. Синтаксис команды add git submodule следующий:
git submodule add <URL_link>
Войти в полноэкранный режим Выйти из полноэкранного режима
  • git submodule initgit submodule init — это копирование связки из файла .gitmodules в файл ./.git/config. git submodule init имеет расширенное поведение, в котором он принимает список явных имен модулей.

Это позволяет активировать только определенные подмодули, необходимые для работы с репозиторием.

Команда:

git submodule init
Войти в полноэкранный режим Выйти из полноэкранного режима

Поддеревья Git

Поддерево git позволяет вложить один репозиторий в другой в виде подкаталога. Это один из нескольких способов управления зависимостями проектов Git.

git-subtree — это скрипт оболочки-обертки для более естественного синтаксиса. На самом деле это все еще часть contrib и не полностью интегрирована в git с обычными man-страницами.

Поддерево — это просто подкаталог, который может быть зафиксирован, разветвлен и объединен с вашим проектом любым удобным для вас способом.

Команды:

  • add: Предположим, что у вас есть локальный репозиторий, в который вы хотите добавить библиотеку внешнего поставщика. В этом случае мы добавим репозиторий git-subtree в качестве подкаталога уже существующего репозитория git-extensions в ~/git-extensions/:
git subtree add --prefix=git-subtree --squash <Git_repo_link>
Вход в полноэкранный режим Выйти из полноэкранного режима
  • pull : Аналогично pull из репозитория с добавленным префиксом.Command:
git subtree pull --prefix <URL_link>
Войти в полноэкранный режим Выйти из полноэкранного режима

Git Submodules VS Subtrees

Git Submodules Поддеревья Git
Это ссылка на рефреш коммита в другом репозитории Код объединяется в истории внешнего репозитория
Требуется, чтобы подмодуль был доступен на сервере (например, GitHub). Поддерево Git является децентрализованным, что в основном означает, что его компоненты разделяются между кучей связанных компьютеров.
Подмодуль Git лучше подходит для компонентной разработки, когда ваш основной проект зависит от фиксированной версии другого компонента (repo). Git subtree больше подходит для разработки на основе системы, где ваше репо содержит все сразу, и вы можете изменять любую часть.
Подходит для меньшего размера репозитория Подходит для репозитория большего размера

Команды Git

S. Нет Имя команды Использование
1 git init Инициализировать локальный Git-репозиторий
2 git add. Добавление одного или нескольких файлов в область хранения
3 git commit -m «Commit Message» Зафиксировать изменения в голове, но не в удаленном хранилище.
4 статус git Проверка состояния текущего репозитория и список измененных файлов.
5 git log Предоставляет список всех коммитов, сделанных в ветке.
6 git diff Просмотр изменений, внесенных в файл
7 git push origin Переместите ветку в удаленный репозиторий, чтобы другие могли ее использовать.
8 git config —global user.name «Имя» Сообщите Git’у, кто вы, настроив имя автора.
9 git config —global user.email user@email.com Сообщите Git’у, кто вы есть, настроив идентификатор электронной почты автора.
10 git clone Создает копию репозитория Git из удаленного источника.
11 git remote add origin Подключает ваш локальный репозиторий к удаленному серверу и добавляет сервер для возможности его push.
12 git branch Создайте новую ветку
13 git checkout Переход от одной ветки к другой
14 git merge Слияние ветки с активной веткой
15 git rebase Повторное внесение коммитов поверх другой базовой ветки
16 git checkout -b Создает новую ветку и переключается на нее
17 git stash Сохраняет изменения в грязном рабочем каталоге
18 git pull Обновление локального репозитория до самого нового коммита
19 git revert Отмена изменений в коммите
20 git clean -n Показывает, какие файлы будут удалены из рабочего каталога. Используйте флаг -f вместо флага -n для выполнения очистки.
21 git log —summary Просмотр изменений (подробный)
22 git diff HEAD Показать разницу между рабочим каталогом и последним коммитом.
23 git log —oneline Просмотр изменений (кратко)
24 git reflog Показать журнал изменений в HEAD локального репозитория. Добавьте флаг —relative-date, чтобы показать информацию о дате или —all, чтобы показать все ссылки.
25 git rebase -i Интерактивный ребазинг текущей ветки на . Запускает редактор для ввода команд, определяющих, как каждый коммит будет перенесён в новую базу.
26 git restore —staged Сброс поэтапного файла
27 git rm -r [Имя_файла] Удаление файла (или папки)
28 git config —list Вывести список всех переменных, установленных в конфигурационном файле, вместе с их значениями
29 git branch -d Удалить локальную ветку в Git
30 git push -d Удалить удаленную ветку в Git
31 git stash pop Удалить изменения из хранилища
32 git commit -am Параметр -am вместе с командой используется для записи сообщения о фиксации в командной строке для уже помещенных файлов.
33 git commit -amend Команда amend используется для редактирования последней фиксации. Если нам нужно изменить сообщение о последней фиксации, можно использовать эту команду.
34 git rm Команда git rm используется для удаления файлов из рабочего дерева и индекса.
35 git pull —rebase Git rebase используется для перезаписи коммитов из одной ветки в другую.
36 git merge —squash Сквош вместе с git merge создает рабочее дерево. Оно индексируется так же, как и при настоящем слиянии, но отбрасывает историю слияния.
37 git revert -e отредактировать сообщение о фиксации перед возвратом, -e используется для того же.
38 git bisect Git bisect просматривает все предыдущие коммиты и использует бинарный поиск, чтобы найти коммит с ошибкой.
39 git blame git blame используется для того, чтобы узнать, кто/какой коммит ответственен за последние изменения в хранилище.
40 git cherry-pick Выбор коммита из одной ветки и применение его к другой ветке известно как cherry picking в Git.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *