Как запушить на гитхаб через консоль
Перейти к содержимому

Как запушить на гитхаб через консоль

  • автор:

Работа с системой контроля версий git из консоли

Git – это распределённая система контроля версий, которую создал Линус Торвальдс в процессе разработки ядра Linux.

Ключевой особенностью системы является её децентрализованность. Благодаря git вы можете вносить изменения в ветку (branch), которая хранится в репозитории (хранилище) на удалённом сервере и видна другим разработчикам. С другой стороны, вы можете создать свою локальную ветку, которая будет видна только на вашей рабочей станции. Однако в любой момент вы можете сделать её общедоступной, разместив в репозитории на удалённом сервере. А можете произвести слияние (merge) вашей локальной ветки с репозиторием так, что на сервере она будет выглядеть частью «ствола» дерева изменений.

В настоящий момент git как система контроля версий является стандартом среди разработчиков, поэтому давайте рассмотрим эту систему более подробно. Начнём с установки и настройки.

Установка

Установка под Ubuntu выполняется одной командой:

sudo apt install git

Настройка

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

git config —global user.name «Ivan Petrov»
git config —global user.email «ivan.petroff@test.com»

Все эти глобальные параметры вы также можете посмотреть и отредактировать в файле .gitconfig в вашей домашней директории. Под Ubuntu это /home/имя_пользователя/.gitconfig.

Глобальные параметры можно переопределить на уровне отдельного проекта. Для этого находясь в папке проекта, выполните указанные выше команды, убрав флаг —global.

Создание локального хранилища

В самом простом случае при помощи git можно организовать локальный репозиторий, в котором вы можете фиксировать изменения «для себя». Перейдём в любую директорию и создадим там пустой репозиторий:

Клонирование репозитория

Если вы хотите скопировать уже существующий репозиторий, который размещён в централизованном хранилище (например, github), то вместо инициализации локального репозитория вам нужно его склонировать, используя url репозитория.

Где найти url репозитория в github

Этот url вы можете найти на главной странице репозитория в github, как показано на картинке выше.

git clone git@github.com:devmarkru/spring-jpa-rest-kotlin.git

После выполнения этой команды в текущей папке у вас появится папка проекта spring-jpa-rest-kotlin.

В любом случае, теперь у нас есть тестовый репозиторий, поэтому перейдём к базовым командам git.

Состояние хранилища

Теперь давайте создадим в папке нашего проекта какой-нибудь текстовый файл, например, test.txt. В нём сохраним произвольный текст. А затем посмотрим в консоли текущее состояние хранилища:

# выводим строку текста и сразу сохраняем её в файл
echo «Some text string» > test.txt
# смотрим статус репозитория
git status

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

Добавление файла к git

В данном случае статус нам покажет, что появился «untracked» файл, который ещё не добавлен в систему контроля версий. Давайте добавим его, чтобы для него учитывалась история изменений.

git add test.txt

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

Но используйте эту команду с осторожностью во избежание добавления нежелательных файлов! Чтобы исключать нежелательные файлы, можно указывать исключения в файле .gitignore. Там можно прописать как отдельные файлы, так и целые каталоги.

Ещё раз посмотрим статус репозитория. Теперь git покажет, что файл был добавлен. Имена добавленных файлов отображаются зелёным цветом.

Фиксация изменений (commit)

Зафиксируем изменение файла test.txt в репозитории. Обязательно используйте опцию -m для указания пояснительного текста к изменению

# создание коммита
git commit -m «file test.txt added»

Если же вы хотите добавить многострочный комментарий при помощи текстового редактора, то можете выполнить просто git commit без параметров. В этом случае откроется текстовый редактор (например, nano или vim) и вы сможете ввести многострочный комментарий. После этого сохраните получившийся файл.

Просмотр истории изменений

Теперь это сообщение можно увидеть в истории изменений нашего проекта:

Для каждого коммита отображается его автор, время коммита, описание и хеш. Этот хеш позволяет легко ссылаться на конкретный коммит, если история изменений слишком большая. Просто укажите первые несколько символов хеша после git log и вы сразу увидите этот коммит.

Изменим содержимое нашего файла test.txt. Его статус изменится на modified. Выполним второй коммит, чтобы зафиксировать это изменение. Обратите внимание, что второй раз команду git add выполнять не нужно.

echo «Some other text» > test.txt
git add .
git commit -m «second commit»

Теперь у нас в истории изменений два коммита и при желании мы легко можем откатить последние изменения.

Удаление файла из git

Теперь удалим наш файл test.txt и сделаем третий коммит.

git rm test.txt
git commit -m «file removed»

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

Постраничный просмотр истории изменений

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

Также можно использовать более компактный вариант лога:

git log —pretty=oneline

В общем-то, этих операций достаточно, чтобы обеспечить базовое версионирование на отдельно взятой рабочей станции.

Работа с ветками (branches)

Git позволяет вести разработку независимых компонентов системы в отдельных ветках. Ветки могут быть как удалённые (remote), которые хранятся на сервере и доступны всем, так и локальные (local), которые хранятся на вашей рабочей машине и доступны только вам. Просмотреть доступные ветки можно при помощи следующих команд:

git branch -a # все ветки
git branch -r # только remote-ветки
git branch -l # только локальные ветки

Активная ветка, т.е. та, в которой вы находитесь сейчас, будет отмечена звёздочкой.

Чтобы переключиться на другую существующую ветку, выполните:

git checkout имя_ветки

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

Создать новую ветку и сразу перейти в неё:

git checkout -b имя_новой_ветки

Имя локальной ветки бывает удобно указывать по номеру задачи в вашей системе управления задач (например, Jira).

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

git checkout -b локальное_имя_ветки origin/имя_ветки_на_сервере

Работа с удалённым репозиторием

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

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

Общий вид команды для получения изменений с сервера:

git pull origin имя_локальной_ветки:имя_ветки_на_сервере

Можно также использовать сокращённый вариант:

После того как вы убедитесь, что новых изменений не было (или что они были успешно синхронизированы с вашей версией), отправьте ваши изменения на сервер.

Общий вид команды для отправки изменений на сервер:

git push origin имя_локальной_ветки:имя_ветки_на_сервере

origin – это алиас удалённого репозитория, который присваивается по умолчанию. Ваш локальный репозиторий может быть связан с несколькими удалёнными. В таком случае, каждый из них будет иметь свой собственный алиас.

Можно также использовать сокращённый вариант:

git push HEAD :имя_ветки_на_сервере

HEAD – это алиас, который всегда указывает на вашу текущую ветку.

Итоги

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

Что такое git push и как его использовать

В инструкции рассказываем о наиболее частых сценариях использования git push.

Эта инструкция — часть курса «Введение в Git».

Смотреть весь курс

Введение

Команда Git push позволяет отправлять локальную ветку на удаленный репозиторий. Она помогает разработчикам синхронизироваться в команде, а именно отправляет проделанные изменения. Если программист работает один, то пуш позволяет хранить код в облаке, например github, gitlab и не только, избавляя от риска потери данных на компьютере.

Дополнительно для синхронизации еще используют git pull для получения изменений с сервера и git remote, чтобы получить список удаленных подключений к репозиторию.

В этой инструкции мы расскажем, как запушить в удаленный git репозиторий. В статье под «пушем» будем подразумевать git push.

Отправка изменений в чистый репозиторий

Перед пушем надо связать локальный и удаленный репозитории. Делается это при помощи команды:

git remote add link

Вместо repository_name нужно дать имя удаленному репозиторию. Далее в инструкции вместо этого параметра мы будем использовать origin, так как чаще всего используют это имя.

Вместо link — ссылка на удаленный репозиторий, она может выглядеть по-разному в зависимости от того используется ssh или https.

Для ssh, который обязателен для github и gitlab, потребуются сделать дополнительные манипуляции для создания ssh-ключа. Соответствующие инструкции есть на этих ресурсах.

Отправка изменений

Перед пушем надо зафиксировать текущие изменения, то есть сделать git commit.

Далее для отправки в терминале пишем:

git push origin

Вместо branch — имя ветки, которую надо отправить. Чаще всего используется master или main:

git push origin master 

Такое каждый раз писать слишком громоздко, для этого придумали git push по умолчанию. Для этого единожды набираем предыдущую команду с флагом -u:

git push -u origin master

После этого можно писать более коротко, так как git запомнил, что пушить надо на сервер origin ветку под именем master:

git push

Таким образом, git позволяет запушить ветку в удаленный репозиторий. Чтобы через git добавить ветку в удаленный репозиторий, надо запушить существующую локальную ветку.

Дополнительные опции публикации

Отправка ветки на сервер в ветку с другим именем

Для того чтобы сделать git push в другую ветку, есть специальный синтаксис, где после имени ветки через двоеточие пишется имя удаленной ветки:

git push origin branch:server_branch

где branch – имя локальной ветки, server_branch – имя удаленной ветки на сервере.

Отправка всех веток на сервер

Вместо имени ветки пишем флаг —all:

git push origin --all

После этого все зафиксированные изменения в ветках отправятся в удаленный репозиторий.

Отправка текущей ветки

Удобный способ отправить текущую ветку с тем же именем на сервере.

git push origin HEAD 

HEAD указывает на текущую ветку (current branch). Тем самым, не надо запоминать имя ветки, на которой вы находитесь.

Принудительная публикация (git push —force …)

При отправке может произойти ошибка публикации:

To github.com:example/test.git ! [rejected] master -> master (fetch first) error: не удалось отправить некоторые ссылки в «github.com:example/test.git»

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

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

Флагом —force или сокращенной его версией -f отключается проверка коммитов и при необходимости выполняется перезапись истории.

git push --force

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

Принудительная публикация с параметром (git push —force-with-lease …)

Это более безопасный, но так же нерекомендуемый вариант вариант принудительного пушинга. Он не перезапишет работу в удаленной ветке, если в нее были добавлены коммиты от других людей.

git push --force-with-lease

Принудительная публикация с этим параметром чревата появлением git push rejected у других людей

Как пушить в PhpStorm

При первом открытии PhpStorm потребуется создать новый проект.

новый проект

В открытом проекте в правом верхнем углу среды разработки располагаются наиболее часто используемые команды git, в том числе пушинга.

часто используемые команды

Синяя стрелка означает git pull, зеленая галочка — git commit, зеленая стрелка — git push. При нажатии на зеленую стрелку (горячие клавиши Ctrl+Alt+K или ⌥ ⌘ K) открывается диалоговое окно с информацией об изменениях и настроках отправки.

Незапушенные коммиты

Самый простой способ узнать про них при помощи команды:

git status 

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

On branch master Your branch is ahead of ‘origin/master’ by 1 commit. (use “git push” to publish your local commits)

Для более подробной информации можно использовать:

git log 

Будет выведена история коммитов:

commit 0fcd9558b013f642a8c3b4a59a16a66de39c99bd (HEAD -> master) Author: Pavel Date: Sun Mar 27 18:57:14 2022 +0300 Local commit commit 289c650767d2c7c2e58486e27b8b3933c6442078 (origin/master, origin/HEAD) Author: Pavel Date: Fri Mar 25 19:41:47 2022 +0300 Pushed commit 

В скобках пишется где и какой коммит расположен.

HEAD -> master означает что текущая ветка (current branch) — это master и это последний локальный коммит в ней.

В нижнем коммите в скобках origin/master означает, что это последний опубликованный коммит на сервере в ветке master, а origin/HEAD, что коммит расположен на ветке, которая совпадает с локальной веткой HEAD.

Как пушить теги

Для создания тегов используют git tag, а для их отправки:

git push origin

Вместо tag_name — имя тега, который надо удалить на сервере.

Также можно сделать отправку всех тегов:

git push --tags

Мы не рекомендуем выбирать этот способ, так как могут отправиться теги, которые были удалены на сервере.

Удаление ветки или тега на сервере

Чтобы удалить ветку на удаленном репозитории, используем уже привычную команду с флагом —delete:

git push --delete origin

remote_branch_or_tag_name — имя ветки или тега на сервере.

Для удаление локальной ветки:

git branch -d

А для удаления локального тега:

Запуск GitHub Desktop из командной строки

Снимок экрана: строка меню на Компьютере Mac. В раскрывающемся меню

  1. В строке меню выберите меню GitHub Desktop и нажмите кнопку Установить программу командной строки.
github /PATH/TO/REPO 

Вы также можете изменить путь к репозиторию, а затем ввести github . , чтобы открыть этот репозиторий.

$ cd /PATH/TO/REPO [repo]$ github . 
  1. Откройте командную строку.
  2. Чтобы запустить GitHub Desktop для последнего открытого репозитория, введите github . Чтобы запустить GitHub Desktop для определенного репозитория, введите github и затем путь к репозиторию.
C:\Users\octocat> github PATH\TO\REPO 

Вы также можете изменить путь к репозиторию, а затем ввести github . , чтобы открыть этот репозиторий.

C:\Users\octocat> cd REPO\MY-REPO C:\Users\octocat\repo\myrepo> github . 

Основные команды для работы с Git

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

☝ В некоторых командах мы будем писать URL-адрес удалённого репозитория и название проекта в квадратных скобках, вот так — [ссылка на удалённый репозиторий] . Мы делаем это только для наглядности. Вам квадратные скобки ставить не нужно.

Первоначальная настройка Git

Работа с любой программой всегда начинается с её настройки. Git можно настроить один раз и менять что-то только по мере необходимости.

Указать имя пользователя — git config —global user.name «Ivan Ivanov» . Задаёт имя пользователя, от которого будут идти коммиты. Вместо Ivan Ivanov нужно написать свои данные на латинице. Если имя состоит из одного слова, кавычки можно не ставить.

Указать электронную почту — git config —global user.email «mail@gmail.com» . Вместо mail@gmail.com нужно указать вашу почту. Обратите внимание, она должна совпадать с той, на которую зарегистрирован аккаунт в Гитхабе.

Посмотреть настройки — git config —list . Параметры можно посмотреть и в конфигурационном файле, но этот способ быстрее.

Работа с репозиторием

Создать репозиторий — git init . Инициализирует пустой репозиторий.

Склонировать удалённый репозиторий — git clone [ссылка на удалённый репозиторий] . Проект появится в директории, где вы находились в момент клонирования.

Связать удалённый и локальный репозитории — git remote add origin [ссылка на удалённый репозиторий] .

Работа с изменениями

Любая работа с изменениями начинается с получения последней версии проекта из удалённого репозитория. Далее вы можете внести правки в проект, добавить изменения в индекс и сделать коммит. В конце нужно отправить изменения в удалённый репозиторий или удалить, если они больше не нужны.

Подтянуть изменения — git pull . Подтягивает в локальный репозиторий последнюю версию проекта. Будьте внимательны, вызов этой команды сотрёт все незафиксированные изменения. Иногда после ввода этой команды появляется конфликт.

Посмотреть статус файлов — git status . Вы увидите, какие файлы изменили, удалили или добавили в проект. При этом статус «Закоммичен» не отобразится.

Добавить файлы в индекс — git add [название файла] . После ввода этой команды вы можете сделать коммит.

Есть похожие команды, например, git add . индексирует сразу все изменённые файлы и папки в директории, где вы находитесь. Обратите внимание, между точкой и словом add нужно ставить пробел. Команда git add :/ добавляет в индекс все файлы независимо от того, в какой директории вы находитесь.

Сделать коммит — git commit -m «Комментарий к коммиту» — фиксирует изменения. До выполнения этой команды локальные изменения никуда не запишутся.

Нужно правильно разбивать изменения и давать полные комментарии к коммитам. Подробнее об этом читайте в статье «Как оформлять коммиты».

Посмотреть историю коммитов — git log . Выводит список всех коммитов. У этой команды есть разные опции, самая используемая из них — —oneline . Она показывает хеш в укороченном формате, ветку, в которой сделан коммит, а также текст коммита. Чтобы использовать эту опцию (как и любую другую), нужно добавить её после команды: git log—oneline .

Запушить изменения — git push . Отправляет все зафиксированные изменения с локального репозитория в удалённый. Это одна из самых важных команд, ведь все вышеописанные действия производятся в локальной копии репозитория. Когда вы закончите работу, эту копию нужно будет отправить в удалённый репозиторий. Только так другие участники процесса смогут получить актуальную версию.

Работа с ветками

Работая с Git, приходится постоянно создавать и перемещаться по веткам. А иногда ветки нужно удалять или сливать.

☝ Здесь мы для примера используем branch-name. Вам при вводе команды нужно указать название вашей ветки.

Создать ветку — git switch —create branch-name . Добавляет новую ветку с названием branch-name и автоматически переключает на неё.

Переключить ветку — git switch branch-name . Вы перейдёте на уже созданную ветку branch-name .

Для создания и переключения веток также можно использовать git checkout . Эта команда появилась раньше, у неё есть множество дополнительных функций. Например, она может восстанавливать изменения в коммите. Как раз из-за такого разнообразия задач разработчики решили создать отдельную команду для переключения между ветками — git switch . Вы можете использовать любую из команд, однако git switch доступна только в версиях от 2.23.

Посмотреть все локальные ветки — git branch .

Переименовать ветку — git branch -m [старое-название-ветки] [новое-название-ветки] — переименовывает ветку. Названия нужно писать на латинице.

Отправить ветку — git push origin [branch-name] — отправляет ветку в удалённый репозиторий.

Удалить ветки — git branch —delete [branch-name] . Команда удаляет ветку [branch-name] в локальном репозитории. Если нужно избавиться от ветки в удалённом репозитории, используйте git push —delete origin [branch-name] .

Влить ветки — git merge [branch-name] . Вливает ветку branch-name в ветку, в которой вы находитесь.

Перебазировать коммиты — git rebase [branch-name] . Перебазирует коммиты из ветки, в которой вы находитесь, в ветку [branch-name] .

Создать точную копию коммитов — git cherry-pick . Команду часто совмещают с git merge и git rebase , чтобы сохранить линейную историю коммитов. То есть создаётся точная копия коммитов, выполняется перебазирование и слияние веток.

Откладывание и удаление

Отложить изменения — git stash push . Откладывает изменения, чтобы вы, например, могли срочно перейти к другой задаче. Чтобы отложить только часть изменений, используйте git stash —patch .

Вернуть отложенные изменения — git stash pop .

Отменить изменения, не добавленные в индекс — git restore [название файла] . Удалит изменения в одном файле. Чтобы удалить изменения во всех файлах, используйте git restore :/ .

Отменить изменения, добавленные в индекс — git reset —hard . Возвращает изменения из индекса и полностью их отменяет.

Удалить коммит — git revert [195dfb0] . Вместо [195dfb0] указывается хеш коммита, его можно узнать с помощью команды git log .

Отменить слияние с конфликтом — git merge —abort . Используется, когда нет времени решать конфликт прямо здесь и сейчас.

Удалить лишнее — git clean . Команда «наводит чистоту» — удаляет неотслеживаемые файлы из рабочего каталога.

✅ Больше информации о работе с Git и практические навыки вы получите на курсе о Git и GitHub.

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Добавить комментарий

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