В прошлый раз мы создали новый репозиторий и залили в него тестовый файл. Сегодня рассмотрим основные команды для работы с удаленным репозиторием. Запускаем терминал Git Bash и переходим в директорию нашего репозитория:
waky@DESKTOP-A92D0OT MINGW64 ~
$ cd repositories/useful_scripts/
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (main)
$
Мы оказались в главной ветке main. Первым делом убедимся, что наша локальная ветка имеет актуальную версию. Для этого надо спулить ветку из репы GitHub. Выполним команду:
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (main)
$ git pull origin main
From https://github.com/waky-ru/useful_scripts
* branch main -> FETCH_HEAD
Already up to date.
Ожидаемо, никто не вносил изменения в ветку после нас, поэтому можем продолжать. В тот раз, мы записывали изменения сразу в главную ветку, но это не правильно с точки зрения организации контроля версий. Представим, что наш тестовый файл участвует в некоторой разработке, в ходе которой он будет меняться. Создадим локально новую ветку:
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (main)
$ git checkout -b develop
Switched to a new branch 'develop'
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
Команда checkout с аргументом -b создает новую ветку, а без него переключает на существующую. Мы создали ветку develop и переключились на нее. Внесем изменения в файл test.txt можете использовать текстовый редактор, а можете непосредственно из консоли:
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ cat test.txt
TEST
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ echo "changes made during develop" >> test.txt
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ cat test.txt
TEST
changes made during develop
Теперь тестовый файл, находящийся в ветке develop, содержит дополнительную строку, по сравнению с версией файла из ветки main. Проверим статус текущей ветки:
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ git status
On branch develop
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
Git сообщает нам что у нас изменился файл test.txt Давайте восстановим его прежнее состояние:
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ git restore test.txt
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ cat test.txt
TEST
Если с командой restore вместо имени файла использовать точку( git restore . ) , то откатятся все изменения. Ладно, нам все равно нужны изменения в файле для наших экспериментов, поэтому внесем в файл еще одну строку:
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ echo "another changes made during develop" >> test.txt
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ cat test.txt
TEST
another changes made during develop
Чтобы отправить наши изменения в удаленный репозиторий нужно добавить изменения и закоммитать их:
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ git add test.txt
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ git commit -m 'new line in test.txt'
[develop 71142ad] new line in test.txt
1 file changed, 1 insertion(+)
Если изменениям подверглись сразу несколько файлов в репе, необязательно перечислять их всех. Можно использовать флаг -A ( git add -A ), чтобы сразу добавить все изменения. Нам осталось только запушить нашу ветку в удаленный репозиторий:
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ git push origin develop
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 290 bytes | 290.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote:
remote: Create a pull request for 'develop' on GitHub by visiting:
remote: https://github.com/waky-ru/useful_scripts/pull/new/develop
remote:
To https://github.com/waky-ru/useful_scripts
* [new branch] develop -> develop
Заходим в наш репозиторий на GitHub. Переходим во вкладку Code и открываем наш тестовый файл. Переключаемся между ветками и видим, что в разных ветках содержимое файла отличается:

Представим, что на данном этапе разработки мы достигли своей цели, и теперь нам нужно чтобы в основной ветке файл так же был обновлен. Переходим во вкладку Pull requests и жмем New pull request. Выбираем ветку в которую будем пулить — main, и из которой — develop. Git подсветит нам изменения, которые претерпит файл в результате пула. Нажимаем Create pull request.

Если вы работаете в команде, то обычно на этом этапе другой человек, должен проверить и одобрить внесение ваших изменений. Но так как мы тут сами по себе, жмем Merge pull request, чтобы смержить изменения в ветку. Подтверждаем мерж Confirm merge.
Можете вернуться во вкладку Code и проверить что ветка main одержит обновленный файл, а перейдя в Blame можно увидеть историю изменений.

Возвращаемся в терминал. И переключаемся обратно на главную ветку. Попробуем еще раз спулить ветку из репозитория:
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (develop)
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
waky@DESKTOP-A92D0OT MINGW64 ~/repositories/useful_scripts (main)
$ git pull origin main
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Unpacking objects: 100% (1/1), 894 bytes | 298.00 KiB/s, done.
From https://github.com/waky-ru/useful_scripts
* branch main -> FETCH_HEAD
a457e15..8a84388 main -> origin/main
Updating a457e15..8a84388
Fast-forward
test.txt | 1 +
1 file changed, 1 insertion(+)
Git обновил версию файла test.txt в ветке main. Мы опробовали основные команды, необходимые, для полного цикла работы с удаленным репозиторием Git.