From 97330dfd5e9673bc681f82f696a473b1bc9544ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 16:44:56 +0500 Subject: [PATCH 01/23] Add s1.md --- s1.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 s1.md diff --git a/s1.md b/s1.md new file mode 100644 index 00000000..e69de29b From c309c9380b2c761b2e83b2943768319756c1c8a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 16:49:20 +0500 Subject: [PATCH 02/23] Add s2.md header --- s1.md | 11 +++++++++++ s2.md | 5 +++++ 2 files changed, 16 insertions(+) create mode 100644 s2.md diff --git a/s1.md b/s1.md index e69de29b..73c640f6 100644 --- a/s1.md +++ b/s1.md @@ -0,0 +1,11 @@ +# S1. Репозитории + +#### Репозиторий — хранилище версий исходников + +#### Рабочий каталог — текущая версия кода + +- `git init` — создать пустой репозиторий +- `git init --bare` — создать пустой репозиторий без рабочего каталога +- `git clone ` — склонировать репозиторий в новый каталог +- `git clone --bare ` — склонировать репозиторий без рабочего каталога +- `git clean -xdf` — удалить неотслеживаемые файлы из рабочего каталога \ No newline at end of file diff --git a/s2.md b/s2.md new file mode 100644 index 00000000..b334bb42 --- /dev/null +++ b/s2.md @@ -0,0 +1,5 @@ +# S2. Коммиты + +#### История версий — дерево коммитов + +#### Индекс коммита используется для постепенной сборки коммита \ No newline at end of file From 47ed6c5815414e00fcd62d1ac5a4bb27f4bdc8a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 16:51:30 +0500 Subject: [PATCH 03/23] Change s2.md --- s2.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/s2.md b/s2.md index b334bb42..b0b6ad41 100644 --- a/s2.md +++ b/s2.md @@ -2,4 +2,17 @@ #### История версий — дерево коммитов -#### Индекс коммита используется для постепенной сборки коммита \ No newline at end of file +#### Индекс коммита используется для постепенной сборки коммита + +- `git add .` — добавить все измененные файлы в индекс +- `git add -p ` — выбрать изменения для добавления в индекс +- `git commit -m ` — сохранить содержимое индекса в репозиторий в виде коммита +- `git commit -am ` — добавить изменения в уже известных файлах в индекс, затем сохранить содержимое индекса в репозиторий в виде коммита +- `git status -sb` — вывести состояние каталога и индекса кратко с указанием текущей ветки +- `git restore .` — отменить изменения каталога в соответствии с индексом +- `git restore -S .` — отменить изменения индекса в соответствии с коммитом (отмена git add .) +- `git rm ` — удалить файл из каталога и индекса, чтобы перестать хранить его историю в репозитории +- `git show ` — показать содержимое коммита +- `git diff []` — вывести разницу между двумя коммитами +- `git diff --name-status []` — список измененных файлов +- `git difftool []` — вывести разницу с помощью difftool из настроек \ No newline at end of file From 4ee22e0e5aeae6bf9b833dfd940309ff18f70ef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 17:10:20 +0500 Subject: [PATCH 04/23] Keep secrets --- .gitignore | 1 + s1.md | 2 ++ 2 files changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index a2bc6c32..efda9193 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,4 @@ Icon[] # Далее можно добавлять другие правила +secrets.txt \ No newline at end of file diff --git a/s1.md b/s1.md index 73c640f6..6530700b 100644 --- a/s1.md +++ b/s1.md @@ -4,6 +4,8 @@ #### Рабочий каталог — текущая версия кода +#### Ничего, кроме исходников, не должно попадать в репозиторий + - `git init` — создать пустой репозиторий - `git init --bare` — создать пустой репозиторий без рабочего каталога - `git clone ` — склонировать репозиторий в новый каталог From 209ccada7c86ad0c4e314a87c7da615ab704748c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 17:12:29 +0500 Subject: [PATCH 05/23] Add part of c1.md --- c1.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 c1.md diff --git a/c1.md b/c1.md new file mode 100644 index 00000000..e69de29b From 9bdb37e7dcbb356f68b765ce4d897cbf17e1113d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 17:13:15 +0500 Subject: [PATCH 06/23] Remove unfinished c1.md --- c1.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 c1.md diff --git a/c1.md b/c1.md deleted file mode 100644 index e69de29b..00000000 From 7ce13fd0f9a87ac00d0d4c7647a3c71f16c12721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 19:26:53 +0500 Subject: [PATCH 07/23] Add s3.md --- s3.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 s3.md diff --git a/s3.md b/s3.md new file mode 100644 index 00000000..9b17bdb6 --- /dev/null +++ b/s3.md @@ -0,0 +1,30 @@ +# S3. Ссылки + +#### HEAD — текущая ссылка, tag — фиксированная ссылка, branch — движущаяся за HEAD ссылка + +#### checkout — перемещение на ветку или коммит, reset — перемещение с веткой на коммит + +#### Видно то, на что есть ссылки, остальное — мусор + +- `git tag` — вывести список тегов +- `git tag ` — создать тег +- `git tag -d ` — удалить тег +- `git branch --sort=-committerdate` — вывести список локальных веток от новых к старым +- `git branch ` — создать ветку +- `git branch -f ` — создать или переместить ветку +- `git branch -M ` — переименовать текущую ветку, даже если новое имя уже занято +- `git branch -d ` — удалить ветку +- `git branch -D ` — удалить ветку, даже если какие-то коммиты будут скрыты +- `git checkout -d ` или `git switch --detach ` — переместить HEAD на коммит, причем получится detached HEAD +- `git checkout ` или `git switch ` — переместить HEAD на ветку +- `git checkout -b ` = `git checkout -b HEAD` или `git switch -c ` — создать ветку и перейти на нее +- `git reset --hard ` — переместить HEAD и текущую ветку на `` +- `git log --oneline --decorate --graph` — вывести историю коммитов от HEAD в виде дерева +- `git log --oneline --decorate --graph --all` — вывести историю коммитов от всех ссылок в виде дерева +- `git log --oneline --decorate --graph --all --reflog` — вывести историю коммитов от всех ссылок и всех недавних положений HEAD в виде дерева +- `git reflog show ` — показать лог действий со ссылкой +- `git reflog` = `git reflog show HEAD` — показать лог действий с HEAD +- `git gc` — удалить ненужные файлы и оптимизировать локальный репозиторий +- `~N` — 1-ый родитель из N-ого поколения, например, `HEAD~3` +- `^N` — N-ый родитель предыдущего поколения, например, `HEAD^1^2` +- `@{N}` — N-ый предшественник по reflog, например, `HEAD@{5}` From e9d96fd629c41934a4302d16854845b92fbbe925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 19:36:32 +0500 Subject: [PATCH 08/23] Replace with quotation --- s1.md | 6 +++--- s2.md | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/s1.md b/s1.md index 6530700b..6395c5c6 100644 --- a/s1.md +++ b/s1.md @@ -1,10 +1,10 @@ # S1. Репозитории -#### Репозиторий — хранилище версий исходников +> Репозиторий — хранилище версий исходников -#### Рабочий каталог — текущая версия кода +> Рабочий каталог — текущая версия кода -#### Ничего, кроме исходников, не должно попадать в репозиторий +> Ничего, кроме исходников, не должно попадать в репозиторий - `git init` — создать пустой репозиторий - `git init --bare` — создать пустой репозиторий без рабочего каталога diff --git a/s2.md b/s2.md index b0b6ad41..7ff2f466 100644 --- a/s2.md +++ b/s2.md @@ -1,8 +1,8 @@ # S2. Коммиты -#### История версий — дерево коммитов +> История версий — дерево коммитов -#### Индекс коммита используется для постепенной сборки коммита +> Индекс коммита используется для постепенной сборки коммита - `git add .` — добавить все измененные файлы в индекс - `git add -p ` — выбрать изменения для добавления в индекс From 7c5bf7b0d9f39d2ba42d808f4d0a8dd1617a2a16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 19:39:42 +0500 Subject: [PATCH 09/23] Hotfix. Add new statements to s2.md --- s2.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/s2.md b/s2.md index b0b6ad41..499c6d15 100644 --- a/s2.md +++ b/s2.md @@ -2,6 +2,12 @@ #### История версий — дерево коммитов +#### Коммиты неизменны, а хэш — идентификатор коммита + +#### В каждом коммите сохраняется полное состояние каталога + +#### Разница между коммитами вычисляется на лету + #### Индекс коммита используется для постепенной сборки коммита - `git add .` — добавить все измененные файлы в индекс @@ -15,4 +21,4 @@ - `git show ` — показать содержимое коммита - `git diff []` — вывести разницу между двумя коммитами - `git diff --name-status []` — список измененных файлов -- `git difftool []` — вывести разницу с помощью difftool из настроек \ No newline at end of file +- `git difftool []` — вывести разницу с помощью difftool из настроек From f14c0ab2984acd96ad1f91bd43d760aba615485a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 20:43:07 +0500 Subject: [PATCH 10/23] Add a1.md --- a1.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 a1.md diff --git a/a1.md b/a1.md new file mode 100644 index 00000000..80e367af --- /dev/null +++ b/a1.md @@ -0,0 +1,12 @@ +# A1. Слияние + +> Два состояния можно объединить через merge, mergetool и commit + +> Участвуют три стороны: current, incoming и base + +> Идентичные изменения в разных ветках не приводят к конфликтам + +- `git merge ` — объединить текущую ветку с другим коммитом +- `git merge --no-ff ` — объединить текущую ветку с другим коммитом, причем обязательно создать новый объединяющий коммит +- `git mergetool` — разрешить имеющиеся конфликты +- `git merge --abort` — отменить слияние From 3eb67f4ad36cf741cd292530cd852817ab1c3030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 21:17:07 +0500 Subject: [PATCH 11/23] Hotfix. Change a1.md --- a1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/a1.md b/a1.md index 80e367af..014d8d15 100644 --- a/a1.md +++ b/a1.md @@ -4,7 +4,7 @@ > Участвуют три стороны: current, incoming и base -> Идентичные изменения в разных ветках не приводят к конфликтам +> Идентичные изменения в разных ветках ПРИВОДЯТ к конфликтам - `git merge ` — объединить текущую ветку с другим коммитом - `git merge --no-ff ` — объединить текущую ветку с другим коммитом, причем обязательно создать новый объединяющий коммит From 4a199afbe90d107330f32e22e55c6d56bf004fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 21:18:18 +0500 Subject: [PATCH 12/23] Add a2.md --- a2.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 a2.md diff --git a/a2.md b/a2.md new file mode 100644 index 00000000..e69de29b From 7b7b26321e57d4a96e68372941966046f8a12fcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Fri, 3 Jul 2026 21:19:36 +0500 Subject: [PATCH 13/23] Revert "Hotfix. Change a1.md" This reverts commit 3eb67f4ad36cf741cd292530cd852817ab1c3030. --- a1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/a1.md b/a1.md index 014d8d15..80e367af 100644 --- a/a1.md +++ b/a1.md @@ -4,7 +4,7 @@ > Участвуют три стороны: current, incoming и base -> Идентичные изменения в разных ветках ПРИВОДЯТ к конфликтам +> Идентичные изменения в разных ветках не приводят к конфликтам - `git merge ` — объединить текущую ветку с другим коммитом - `git merge --no-ff ` — объединить текущую ветку с другим коммитом, причем обязательно создать новый объединяющий коммит From f22a13b4fe31146a9ed2c457e36092ea8b1758ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Sat, 4 Jul 2026 15:35:36 +0500 Subject: [PATCH 14/23] Hotfix. Change tag command description in s3.md --- s3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/s3.md b/s3.md index 360c5f30..6002267d 100644 --- a/s3.md +++ b/s3.md @@ -7,7 +7,7 @@ > Видно то, на что есть ссылки, остальное — мусор - `git tag` — вывести список тегов -- `git tag ` — создать тег +- `git tag ` — создать обычный тег - `git tag -d ` — удалить тег - `git branch --sort=-committerdate` — вывести список локальных веток от новых к старым - `git branch ` — создать ветку @@ -27,4 +27,4 @@ - `git gc` — удалить ненужные файлы и оптимизировать локальный репозиторий - `~N` — 1-ый родитель из N-ого поколения, например, `HEAD~3` - `^N` — N-ый родитель предыдущего поколения, например, `HEAD^1^2` -- `@{N}` — N-ый предшественник по reflog, например, `HEAD@{5}` +- `@{N}` — N-ый предшественник по reflog, например, `HEAD@{5}` \ No newline at end of file From 0e0e2534c7f32dc84a4b21207178444ee8408202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Sat, 4 Jul 2026 15:46:52 +0500 Subject: [PATCH 15/23] Hotfix. Add new statements to a2.md --- a2.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/a2.md b/a2.md index e69de29b..466cc864 100644 --- a/a2.md +++ b/a2.md @@ -0,0 +1,18 @@ +# A2. Пересоздание коммитов + +> Нельзя изменить коммит — можно только пересоздать + +> Дополнить или переименовать коммит — commit --amend + +> Разобрать коммиты — reset --soft + +> Отменить коммит другим коммитом — revert + +- `git commit --amend` — заменить последний коммит ветки на коммит с дополнительными изменениями и задать новое сообщение к коммиту +- `git commit --amend --no-edit` — заменить последний коммит ветки на коммит с дополнительными изменениями, но с тем же сообщением +- `git reset --hard ` — переместить текущую ветку на ``, задать индекс и каталог по целевому коммиту `` +- `git reset ` = `git reset --mixed ` — переместить текущую ветку на ``, переместить текущую версию каталога, задать индекс по целевому коммиту `` +- `git reset --soft ` — переместить текущую ветку на ``, переместить текущие версии каталога и индекса +- `git reset --soft HEAD^1` — отменить последний коммит +- `git revert ` — создать коммит, отменяющий изменения из коммита +- `git revert -m ` — создать коммит, отменяющий изменения одной из объединенных коммитом слияния веток, причем обычно 1 — основная ветка до слияния, 2 — ветка, которая была влита. \ No newline at end of file From 8cc471c839706890128d786a392544fe716fd0b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Sat, 4 Jul 2026 15:32:47 +0500 Subject: [PATCH 16/23] a3.md --- a3.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 a3.md diff --git a/a3.md b/a3.md new file mode 100644 index 00000000..ae257071 --- /dev/null +++ b/a3.md @@ -0,0 +1,15 @@ +# A3. Перенос изменений + +> Получить отдельные правки из другой ветки — cherry-pick + +> Перенести локальные изменения в новое место — stash + +> Переместить коммиты для выстраивания истории в линию — rebase + +> Схлопнуть коммиты в один — интерактивный rebase со squash или fixup + +- `git rebase ` — применить все коммиты от общего родителя до текущего коммита к `` +- `git rebase --autostash ` — сохранить локальные изменения, выполнить rebase, а затем восстановить локальные изменения +- `git rebase -i ` — применить заново все коммиты, указав действие с каждым коммитом +- `git rebase --continue` — продолжить rebase после разрешения конфликтов +- `git rebase --abort` — отменить rebase \ No newline at end of file From d66dc717ac0d38799e71a7d719ce1bf40f6a6ee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Sat, 4 Jul 2026 15:36:29 +0500 Subject: [PATCH 17/23] Change s3.md --- s3.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/s3.md b/s3.md index 6002267d..e83b30e7 100644 --- a/s3.md +++ b/s3.md @@ -7,7 +7,8 @@ > Видно то, на что есть ссылки, остальное — мусор - `git tag` — вывести список тегов -- `git tag ` — создать обычный тег +- `git tag ` — создать легковесный тег +- `git tag -a ` — создать аннотированный тег - `git tag -d ` — удалить тег - `git branch --sort=-committerdate` — вывести список локальных веток от новых к старым - `git branch ` — создать ветку From 83fae44edac344a915115b398a7b7d069d559241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Sat, 4 Jul 2026 15:44:11 +0500 Subject: [PATCH 18/23] Add cherry-pick command to a3.md --- a3.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/a3.md b/a3.md index ae257071..95cf1f44 100644 --- a/a3.md +++ b/a3.md @@ -8,6 +8,8 @@ > Схлопнуть коммиты в один — интерактивный rebase со squash или fixup +- `git cherry-pick ` — применить изменения из указанного коммита к HEAD и сделать коммит +- `git cherry-pick -n ` — применить изменения из указанного коммита, оставив их в индексе - `git rebase ` — применить все коммиты от общего родителя до текущего коммита к `` - `git rebase --autostash ` — сохранить локальные изменения, выполнить rebase, а затем восстановить локальные изменения - `git rebase -i ` — применить заново все коммиты, указав действие с каждым коммитом From 42c1d7784feace397ff2a2c320536b54111f48e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Sat, 4 Jul 2026 15:47:55 +0500 Subject: [PATCH 19/23] Add stash command to a3.md --- a3.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/a3.md b/a3.md index 95cf1f44..98f26c01 100644 --- a/a3.md +++ b/a3.md @@ -10,8 +10,13 @@ - `git cherry-pick ` — применить изменения из указанного коммита к HEAD и сделать коммит - `git cherry-pick -n ` — применить изменения из указанного коммита, оставив их в индексе +- `git stash push -u` — сохранить все изменения в отслеживаемых файлах и новые файлы в виде набора изменений +- `git stash pop` — восстановить последний сохраненный набор изменений и удалить его из списка +- `git stash list` — показать список сохраненных наборов изменений +- `git stash apply --index ` — применить конкретный сохраненный набор изменений +- `git stash drop --index ` — удалить конкретный сохраненный набор изменений - `git rebase ` — применить все коммиты от общего родителя до текущего коммита к `` - `git rebase --autostash ` — сохранить локальные изменения, выполнить rebase, а затем восстановить локальные изменения - `git rebase -i ` — применить заново все коммиты, указав действие с каждым коммитом - `git rebase --continue` — продолжить rebase после разрешения конфликтов -- `git rebase --abort` — отменить rebase \ No newline at end of file +- `git rebase --abort` — отменить rebase From c579dd76da417302a6fdb1d3fa4b6019295276a6 Mon Sep 17 00:00:00 2001 From: John Doe Date: Mon, 6 Oct 2025 00:05:49 +0500 Subject: [PATCH 20/23] Add guide extensions --- c1.md | 35 ++++++++++++++++++ c2.md | 12 +++++++ c3.md | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++ index.html | 82 ++++++++++++++++++++++++++++++++++++++++++ r1.md | 13 +++++++ 5 files changed, 245 insertions(+) create mode 100644 c1.md create mode 100644 c2.md create mode 100644 c3.md create mode 100644 index.html create mode 100644 r1.md diff --git a/c1.md b/c1.md new file mode 100644 index 00000000..11ee6d28 --- /dev/null +++ b/c1.md @@ -0,0 +1,35 @@ +# C1. Минимальная конфигурация + +## Установка Git +С официального сайта: [https://git-scm.com/downloads](https://git-scm.com/downloads) + +Или с помощью одного из пакетных менеджеров: +- Windows: `choco install git` +- Linux: `sudo apt install git` +- macOS: `brew install git` + + +## Первоначальная настройка + +### Имя и почта пользователя +- `git config --global user.name ""` — задать имя пользователя +- `git config --global user.email ""` — задать почту пользователя + +### Текстовый редактор +#### Для Windows +`git config --global core.editor notepad` + +#### Для Linux, macOS +По умолчанию vim, но можно поменять на nano: `git config --global core.editor nano` + + +## Настройка нового репозитория + +### Описать, что внутри репозитория и как этим пользоваться +`README.md` + +### Надо игнорировать все, кроме исходников +[https://github.com/github/gitignore](https://github.com/github/gitignore) — `.gitignore` для разных языков программирования + +### Обычно хранится стандартный текст, но есть исключения +[https://github.com/alexkaratarakis/gitattributes](https://github.com/alexkaratarakis/gitattributes) — `.gitattributes` для разных языков программирования diff --git a/c2.md b/c2.md new file mode 100644 index 00000000..ae3a7aa7 --- /dev/null +++ b/c2.md @@ -0,0 +1,12 @@ +# C2. Аутентификация + +## SSH +1. Сгенерировать ключи: `ssh-keygen -t ed25519 -C "your_email@example.com"` +2. Оставить закрытый ключ в домашнем каталоге пользователя `~/.ssh/id_ed25519` +3. Зарегистрировать открытый ключ, т.е. содержимое файла `~/.ssh/id_rsa.pub` из домашнего каталога пользователя, на GitHub по адресу [https://github.com/settings/ssh/new](https://github.com/settings/ssh/new) +4. Добавить GitHub в доверенные узлы на клиенте: `ssh -T git@github.com` +5. При клонировании репозиториев использовать SSH: `git@github.com:username/repo.git` + +## HTTPS +1. Подключить Credential Manager: `git config --global credential.helper manager` +2. При клонировании репозиториев использовать HTTPS: `https://github.com/username/repo.git` diff --git a/c3.md b/c3.md new file mode 100644 index 00000000..32116a1c --- /dev/null +++ b/c3.md @@ -0,0 +1,103 @@ +# C3. Комфортная конфигурация + +## Гибкая настройка под любой процесс +- `git config -e --system` — редактировать настройки системы +- `git config -e --global` — редактировать настройки пользователя +- `git config -e` — редактировать настройки репозитория + + +## Документация ко всем командам +- `git help` — список команд +- `git -h` — помощь по команде в терминале +- `git --help` — помощь по команде в браузере + + +## Донастройка команд + +### Название первой ветки репозитория +`git config --global init.defaultBranch main` + +### Настройка вывода log +1. `git config --global format.pretty %C(auto)%h %C(black bold)%ad% %C(reset)%C(auto)%d %s %C(black bold)[%an]%C(reset)` +2. `git config --global log.date format-local:%d.%m.%Y %H:%M` + +### Выбор difftool +1. `git config --global diff.tool vscode` +2. `git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'` + +### Выбор и настройка mergetool +1. `git config --global merge.tool vscode` +2. `git config --global mergetool.vscode.cmd 'code --wait --merge $REMOTE $LOCAL $BASE $MERGED'` + +`git config --global mergetool.keepbackup false` + +### Разрешение fast-forward merge +По умолчанию и это хорошо: `git config --global merge.ff true` +при необходимости можно: `git config --global merge.ff false` + +### Автосохранение локальных изменений при rebase +`git config --global rebase.autostash true` + +### Автонастройка отслеживания при push новых веток +`git config --global push.autoSetupRemote true` + +### Запрет merge для pull +Удобно заменить на rebase: `git config --global pull.rebase true` +либо можно запретить: `git config --global pull.ff only` + +### Режим simple сопоставления веток для push +`git config --global push.default simple` — это режим по умолчанию в Git 2.0 и выше + + +## Алиасы для краткости команд +`git config --global alias.configure "config --global -e"` +Только bash: `git config --global alias.aliases '!git config -l | grep alias'` +Только PowerShell: `git config --global alias.aliases "!git config -l | findstr alias"` + +`git config --global alias.cleanup "clean -xdf"` + +`git config --global alias.cm "commit -m"` +`git config --global alias.call "!git add --all && git commit"` +`git config --global alias.calm "!git add --all && git commit -m"` +`git config --global alias.amend "commit --amend --no-edit"` + +`git config --global alias.st "status -sb"` + +`git config --global alias.gr "log --graph"` +`git config --global alias.gra "log --graph --all"` +`git config --global alias.graph "log --graph --oneline --decorate --all"` +`git config --global alias.grr "log --graph --all --reflog"` + +`git config --global alias.br "branch -vv --sort=-committerdate --list"` + +`git config --global alias.co "checkout"` +`git config --global alias.cob "checkout -b"` +`git config --global alias.sw "switch"` +`git config --global alias.swc "switch -c"` +`git config --global alias.back "checkout -"` + +`git config --global alias.undo "reset --soft HEAD^"` +`git config --global alias.forget "reset --hard HEAD^"` +`git config --global alias.restart "reset --hard @{u}"` + +`git config --global alias.merc "merge --no-ff"` +`git config --global alias.ff "merge --ff-only FETCH_HEAD"` + +`git config --global alias.autorebase "rebase --autostash"` +`git config --global alias.rr "rebase --autostash FETCH_HEAD"` + +`git config --global alias.pushup "push -u origin HEAD"` +`git config --global alias.please "push --force-with-lease"` +`git config --global alias.puff "pull --ff-only"` +`git config --global alias.purr "pull --rebase --autostash"` +`git config --global alias.sync "!git pull --rebase --autostash && git push"` + + +## Окончание строк текстовых файлов +### Для Windows +1. `git config --global core.autocrlf true` +2. `git config --global core.safecrlf warn` + +### Для Linux, macOS +1. `git config --global core.autocrlf input` +2. `git config --global core.safecrlf warn` diff --git a/index.html b/index.html new file mode 100644 index 00000000..43619d3e --- /dev/null +++ b/index.html @@ -0,0 +1,82 @@ + + + + + + + + +
+
+
+

ULearn Git Guide

+ https://ulearn.me/course/git +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/r1.md b/r1.md new file mode 100644 index 00000000..a079be15 --- /dev/null +++ b/r1.md @@ -0,0 +1,13 @@ +# R1. Получение версий + +> В репозитории есть список псевдонимов удаленных репозиториев + +> fetch — безопасная операция получения данных из любого другого репозитория + +- `git remote -v` — вывести список удаленных репозиториев с их адресами +- `git remote add ` — добавить удаленный репозиторий по URL и дать ему указанное имя +- `git remote set-url ` — задать удаленному репозиторию новый URL +- `git remote remove ` — удалить запись об удаленном репозитории +- `git fetch ` — получить коммиты указанного по имени или URL удаленного репозитория +- `git fetch` = `git fetch origin` — получить коммиты основного удаленного репозитория +- `git fetch --all` — получить коммиты всех удаленных репозиториев из списка From 4d28c235195e0c79d8b0edf1a4cc0c62bdec4464 Mon Sep 17 00:00:00 2001 From: John Doe Date: Mon, 6 Oct 2025 00:12:32 +0500 Subject: [PATCH 21/23] Add runner --- run.cmd | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 run.cmd diff --git a/run.cmd b/run.cmd new file mode 100644 index 00000000..384b1fa4 --- /dev/null +++ b/run.cmd @@ -0,0 +1,3 @@ +start npx http-server +timeout 10 +start http://127.0.0.1:8080/index.html From a7e46c276c758860388bb1b520dc911eda963fa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Sun, 5 Jul 2026 12:35:54 +0500 Subject: [PATCH 22/23] Hotfix. Add r2.md --- r2.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 r2.md diff --git a/r2.md b/r2.md new file mode 100644 index 00000000..9687c76d --- /dev/null +++ b/r2.md @@ -0,0 +1,17 @@ +# R2. Отправка версий + +> Любое изменение в удаленном репозитории — это push + +> Обычный push будет успешным, если локальная ветка является потомком удаленной ветки + +> Нельзя делать force push with lease в общие ветки, а force push вообще делать нельзя + +- `git push :` — отправить коммиты из локальной ветки `` в удаленный репозиторий, а затем переместить ветку `` на коммит, соответствующий `` +- `git push` = `git push origin HEAD` — отправить коммиты из текущей локальной ветки в основной удаленный репозиторий, а затем переместить соответствующую ветку удаленного репозитория на коммит, на который указывает текущая локальная ветка +- `git push -f` — выполнить push, даже если локальная ветка не является потомком удаленной ветки +- `git push --force-with-lease` — выполнить push, даже если локальная ветка не является потомком удаленной ветки, но при условии, что удаленная ветка не сдвигалась (всегда использовать вместо предыдущей команды) +- `git push --all ` — отправить все локальные ветки в удаленный репозиторий +- `git push -d ` — удалить ветку или тег в удаленном репозитории +- `git push tag ` — отправить тег в удаленный репозиторий +- `git push --tags` — отправить все локальные теги в удаленный репозиторий +- `git push --mirror` — выполнить агрессивный push для всех тегов, веток и HEAD, подходит для создания удаленной копии локального репозитория \ No newline at end of file From ce889e24c065881ec32cd7325773a9b0867a0b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BB=D0=B0=D0=B4?= Date: Sun, 5 Jul 2026 13:58:04 +0500 Subject: [PATCH 23/23] Add r3.md --- r3.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 r3.md diff --git a/r3.md b/r3.md new file mode 100644 index 00000000..344f9cb5 --- /dev/null +++ b/r3.md @@ -0,0 +1,21 @@ +# R3. Сопоставление веток + +> Сопоставление локальных и удаленных веток бывает либо по имени ветки, либо по настройкам отслеживания у локальных веток + +> Сопоставление веток обеспечивает работу push без параметров + +> Сопоставление веток необходимо для выставления ссылки FETCH_HEAD после fetch, которая используется в команде pull + +- `git branch -vv` — вывести список локальных веток с указанием удаленных веток, которые отслеживаются этими локальными ветками +- `git branch -u /` — задать текущей локальной ветке новую вышестоящую ветку, т.е. удаленную ветку, которую эта локальная ветка будет отслеживать +- `git branch --unset-upstream` — удалить отслеживание у текущей локальной ветки +- `git push -u origin HEAD` — создать удаленную ветку, соответствующую локальной, сделать так, чтобы локальная ветка отслеживала удаленную ветку, затем добавить изменения из локальной ветки в удаленный репозиторий +- `git checkout ` — создать локальную ветку, отслеживающую удаленную ветку, затем переместить HEAD на нее +- `git pull` = `git pull origin` — получить содержимое основного удаленного репозитория, а затем влить изменения из удаленной ветки в соответствующую локальную ветку +- `git pull --ff-only` — получить содержимое, а затем влить, если возможен fast-forward merge +- `git pull --rebase` — получить содержимое, а затем выполнить rebase локальной ветки на удаленную ветку +- `git pull --rebase --autostash` — сохранить локальные изменения, получить содержимое, выполнить rebase локальной ветки на удаленную ветку, применить сохраненные изменения +- `git config --global push.default simple` — задать simple-режим сопоставления веток при push. Это режим по умолчанию в Git 2.0 и выше +- `git config --global push.autoSetupRemote true` — автонастройка отслеживания при push новых веток +- `@{u}` — вышестоящая ветка для ``, например, `main@{u}` +- `HEAD@{u}` = `@{u}` — вышестоящая ветка для текущей ветки \ No newline at end of file