Что такое 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 игнорировал.
- Откройте каталог вашего проекта на компьютере.
- Создайте в нем файл .gitignore.
- Внутри .gitignore напишите имена всех файлов, которые вы хотите, чтобы Git игнорировал.
- Теперь добавьте .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 просматривает все предыдущие коммиты и использует двоичный поиск, чтобы найти коммит с ошибкой.
Он применяется следующим образом:
- git bisect start — Запускает биссектрису
- git bisect good v1.0 — Упоминание последнего рабочего коммита.
- 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. |