0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Совсем недавно мы говорили про<a>основы Git</a>. В этом материале обсудим, что это такое -<strong>GitHub</strong>. Также вы узнаете про особенности продвинутого использования GitHub и ознакомитесь с некоторыми популярными командами.</p>
1
<p>Совсем недавно мы говорили про<a>основы Git</a>. В этом материале обсудим, что это такое -<strong>GitHub</strong>. Также вы узнаете про особенности продвинутого использования GitHub и ознакомитесь с некоторыми популярными командами.</p>
2
<p>GitHub - это платформа, хранящая различные Git-репозитории на своих многочисленных серверах. Также GitHub называют<strong>крупнейшим веб-сервисом</strong>для хостинга и совместной разработки IT-проектов. Гитхаб основан на системе контроля версий Git и разработан компанией GitHub на Ruby on Rails. Он бесплатен для тех проектов, которые имеют открытый исходный код. Для крупных корпоративных клиентов доступны платные тарифные планы.</p>
2
<p>GitHub - это платформа, хранящая различные Git-репозитории на своих многочисленных серверах. Также GitHub называют<strong>крупнейшим веб-сервисом</strong>для хостинга и совместной разработки IT-проектов. Гитхаб основан на системе контроля версий Git и разработан компанией GitHub на Ruby on Rails. Он бесплатен для тех проектов, которые имеют открытый исходный код. Для крупных корпоративных клиентов доступны платные тарифные планы.</p>
3
<p>Создатели говорят, что<strong>GitHub</strong>- это<strong>социальная сеть для разработчиков</strong>, ведь участники могут не только кодить, но и общаться, следить за новостями, комментировать правки других. Слоган GitHub - "<strong>Пишем код вместе</strong>" (Social Coding), хотя часто можно встретить и другую его интерпретацию, англоязычный вариант которой намекает на неформальность общения: Fork you! ("Ответвись!").</p>
3
<p>Создатели говорят, что<strong>GitHub</strong>- это<strong>социальная сеть для разработчиков</strong>, ведь участники могут не только кодить, но и общаться, следить за новостями, комментировать правки других. Слоган GitHub - "<strong>Пишем код вместе</strong>" (Social Coding), хотя часто можно встретить и другую его интерпретацию, англоязычный вариант которой намекает на неформальность общения: Fork you! ("Ответвись!").</p>
4
<h2>Возможности GitHub</h2>
4
<h2>Возможности GitHub</h2>
5
<p>Если вы являетесь пользователем GitHub, вы можете без проблем хранить удалённые репозитории на данных серверах и одновременно с этим вносить свой вклад в репозитории open-source. По сути GitHub дополняет использование Git, плюс открывает некоторые<strong>новые возможности</strong>.</p>
5
<p>Если вы являетесь пользователем GitHub, вы можете без проблем хранить удалённые репозитории на данных серверах и одновременно с этим вносить свой вклад в репозитории open-source. По сути GitHub дополняет использование Git, плюс открывает некоторые<strong>новые возможности</strong>.</p>
6
<p>К примеру, появляется возможность сделать<strong>форк удалённого репозитория</strong>, создав свою копию репозитория на GitHub-сервере. Это может быть полезным, если у вас отсутствуют права на создание ветви в оригинальном репозитории. После того, как вы используете команду git clone, ваш локальный репозиторий сможет отслеживать оригинальный репозиторий как<strong>upstream</strong>, а удалённый форк как<strong>origin</strong>.</p>
6
<p>К примеру, появляется возможность сделать<strong>форк удалённого репозитория</strong>, создав свою копию репозитория на GitHub-сервере. Это может быть полезным, если у вас отсутствуют права на создание ветви в оригинальном репозитории. После того, как вы используете команду git clone, ваш локальный репозиторий сможет отслеживать оригинальный репозиторий как<strong>upstream</strong>, а удалённый форк как<strong>origin</strong>.</p>
7
<p>После этого может возникнуть необходимость слить тематическую ветвь удалённого репозитория в основную ветвь оригинального. Для этого создаётся новый запрос на внесение изменений (Pull Request), причём GitHub проверит наличие конфликтов перед выполнением слияния. Также в запросе можно обсуждать код, а все коммиты, отправляемые вами в удалённую ветвь, автоматически добавятся в запрос.</p>
7
<p>После этого может возникнуть необходимость слить тематическую ветвь удалённого репозитория в основную ветвь оригинального. Для этого создаётся новый запрос на внесение изменений (Pull Request), причём GitHub проверит наличие конфликтов перед выполнением слияния. Также в запросе можно обсуждать код, а все коммиты, отправляемые вами в удалённую ветвь, автоматически добавятся в запрос.</p>
8
<h2>Продвинутое использование GitHub: интерактивная подготовка</h2>
8
<h2>Продвинутое использование GitHub: интерактивная подготовка</h2>
9
<p>В GitHub можно удобно управлять областью подготовленных файлов (допустим, для фиксации вместо одного большого коммита нескольких небольших). Для этого используется интерактивная консоль, запускаемая следующим образом:</p>
9
<p>В GitHub можно удобно управлять областью подготовленных файлов (допустим, для фиксации вместо одного большого коммита нескольких небольших). Для этого используется интерактивная консоль, запускаемая следующим образом:</p>
10
<p>В данной консоли пользователю доступны 8 команд: • update - для подготовки отслеживаемых файлов; • revert - убирает несколько либо один файл из подготовленной области; • status - показывает для каждого из файлов краткое описание (что подготовлено/не подготовлено); • add untracked - обеспечивает подготовку неотслеживаемого файла; • patch - служит для подготовки лишь части файла (это полезно, если вы изменили несколько функций, однако хотите разбить изменения на некоторое число коммитов); • quit - для выхода из интерактивной консоли; • diff - показывает перечень подготовленных файлов, плюс даёт возможность увидеть изменения по каждому из них; • help - показывает краткое описание каждой команды.</p>
10
<p>В данной консоли пользователю доступны 8 команд: • update - для подготовки отслеживаемых файлов; • revert - убирает несколько либо один файл из подготовленной области; • status - показывает для каждого из файлов краткое описание (что подготовлено/не подготовлено); • add untracked - обеспечивает подготовку неотслеживаемого файла; • patch - служит для подготовки лишь части файла (это полезно, если вы изменили несколько функций, однако хотите разбить изменения на некоторое число коммитов); • quit - для выхода из интерактивной консоли; • diff - показывает перечень подготовленных файлов, плюс даёт возможность увидеть изменения по каждому из них; • help - показывает краткое описание каждой команды.</p>
11
<p>Если вы видите рядом с файлом символ *, это значит, что команда изменит его статус на "неподготовлен" либо "подготовлен" в зависимости от того, происходит откат либо обновление. Если нажмёте Enter, не введя данные ни в одно из подменю команды, имеющиеся файлы перейдут в подготовленное/неподготовленное состояние.</p>
11
<p>Если вы видите рядом с файлом символ *, это значит, что команда изменит его статус на "неподготовлен" либо "подготовлен" в зависимости от того, происходит откат либо обновление. Если нажмёте Enter, не введя данные ни в одно из подменю команды, имеющиеся файлы перейдут в подготовленное/неподготовленное состояние.</p>
12
<p>Учтите, что создание патчей возможно как в интерактивной консоли, так и посредством команды git add -p.</p>
12
<p>Учтите, что создание патчей возможно как в интерактивной консоли, так и посредством команды git add -p.</p>
13
<h2>Продвинутое использование GitHub: правим историю</h2>
13
<h2>Продвинутое использование GitHub: правим историю</h2>
14
<p>Для улучшения контроля над историей коммитов локальной ветви используют команду:</p>
14
<p>Для улучшения контроля над историей коммитов локальной ветви используют команду:</p>
15
<p>Она открывает интерактивную консоль в целях перемещения набора последних n-коммитов, которые перечислены в порядке от старых к новым. Так вы сможете "отредактировать историю", но учтите, что оригинальные коммиты можно лишь переместить, но не изменить.</p>
15
<p>Она открывает интерактивную консоль в целях перемещения набора последних n-коммитов, которые перечислены в порядке от старых к новым. Так вы сможете "отредактировать историю", но учтите, что оригинальные коммиты можно лишь переместить, но не изменить.</p>
16
<p>Также можно изменить порядок коммитов, поменяв порядок их перечисления.</p>
16
<p>Также можно изменить порядок коммитов, поменяв порядок их перечисления.</p>
17
<h2>Изменяем сообщение коммита в GitHub и разбиваем коммиты</h2>
17
<h2>Изменяем сообщение коммита в GitHub и разбиваем коммиты</h2>
18
<p>Чтобы указать коммит, который нужно изменить, используют команду edit. Далее, когда Git будет выполнять перемещение, он на этом коммите остановится. После этого для изменения сообщения либо подготовки забытых файлов можно будет воспользоваться git commit -amend.</p>
18
<p>Чтобы указать коммит, который нужно изменить, используют команду edit. Далее, когда Git будет выполнять перемещение, он на этом коммите остановится. После этого для изменения сообщения либо подготовки забытых файлов можно будет воспользоваться git commit -amend.</p>
19
<p>Когда желаете разделить коммит, введите после остановки git reset HEAD^ (в итоге HEAD будет перемещён назад на один коммит, а все изменённые в данном коммите файлы перейдут в статус "неподготовленные"). После этого можно зафиксировать файлы в отдельных коммитах привычным образом. После завершения редактирования, используйте команду:</p>
19
<p>Когда желаете разделить коммит, введите после остановки git reset HEAD^ (в итоге HEAD будет перемещён назад на один коммит, а все изменённые в данном коммите файлы перейдут в статус "неподготовленные"). После этого можно зафиксировать файлы в отдельных коммитах привычным образом. После завершения редактирования, используйте команду:</p>
20
<h2>Перезапись нескольких коммитов в GitHub</h2>
20
<h2>Перезапись нескольких коммитов в GitHub</h2>
21
<p>В некоторых случаях нужно перезаписать несколько коммитов - для этого предусмотрена команда git filter-branch. Допустим, если хотите удалить по ошибке зафиксированный файл, введите:</p>
21
<p>В некоторых случаях нужно перезаписать несколько коммитов - для этого предусмотрена команда git filter-branch. Допустим, если хотите удалить по ошибке зафиксированный файл, введите:</p>
22
git filter-branch --tree-filter 'git rm -f <имя файла>' HEAD<p>При этом помните, что вся история перемещается.</p>
22
git filter-branch --tree-filter 'git rm -f <имя файла>' HEAD<p>При этом помните, что вся история перемещается.</p>
23
<h2>Объединение нескольких коммитов в GitHub</h2>
23
<h2>Объединение нескольких коммитов в GitHub</h2>
24
<p>При работе над новой функцией в проекте можно постепенно фиксировать малейшие изменения в тематической ветви. Но это засоряет историю небольшими коммитами, что иногда не соответствует правилам проекта. Это можно исправить, если объединить ряд маленьких коммитов в один большой. Тут используйте команду pick, с помощью которой вы сможете выбрать первый коммит, а с помощью squash - все последующие. В результате Git применит все изменения в одном коммите, плюс попросит отредактировать сообщение для общего коммита.</p>
24
<p>При работе над новой функцией в проекте можно постепенно фиксировать малейшие изменения в тематической ветви. Но это засоряет историю небольшими коммитами, что иногда не соответствует правилам проекта. Это можно исправить, если объединить ряд маленьких коммитов в один большой. Тут используйте команду pick, с помощью которой вы сможете выбрать первый коммит, а с помощью squash - все последующие. В результате Git применит все изменения в одном коммите, плюс попросит отредактировать сообщение для общего коммита.</p>
25
<h2>Переносим отдельный коммит в GitHub</h2>
25
<h2>Переносим отдельный коммит в GitHub</h2>
26
<p>Кроме перемещения и слияния, вас может интересовать, например, какой-нибудь определённый коммит. Представьте, что есть локальная ветвь<strong>drafts</strong>, в которой вы трудитесь над несколькими потенциальными статьями, однако хотите опубликовать лишь одну из них. Чтобы это сделать, предусмотрена команда git cherry-pick. А чтобы получить определённые коммиты, используйте:</p>
26
<p>Кроме перемещения и слияния, вас может интересовать, например, какой-нибудь определённый коммит. Представьте, что есть локальная ветвь<strong>drafts</strong>, в которой вы трудитесь над несколькими потенциальными статьями, однако хотите опубликовать лишь одну из них. Чтобы это сделать, предусмотрена команда git cherry-pick. А чтобы получить определённые коммиты, используйте:</p>
27
git log <основная ветка>..<тематическая><p>Учтите, что так создаётся новый коммит, который лишь<strong>повторяет diff</strong>выбранного вами коммита. То есть он повторяет разницу между этим коммитом и предыдущим, однако не его состояние.</p>
27
git log <основная ветка>..<тематическая><p>Учтите, что так создаётся новый коммит, который лишь<strong>повторяет diff</strong>выбранного вами коммита. То есть он повторяет разницу между этим коммитом и предыдущим, однако не его состояние.</p>
28
28