развернуть
https://github.com/git/git
https://githowto.com/ru
https://git-scm.com/book/ru/v2
http://learngitbranching.js.org/
http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru/ch02.html
Справочник предопределенных переменных CI/CD

Ежедневная работа с Git
Работаем с Git: первые шаги в GitHub
Удачная модель ветвления для Git
Эффективное использование Github
Шпаргалка с основными командами для Git
19 советов по повседневной работе с Git
Git Rebase: руководство по использованию
Подробное введение в работу с Git
GIT: Инструкция-шпаргалка для начинающих
Git на сервере - Генерация открытого SSH ключа
https://webhamster.ru/mytetrashare/index/mtb0
Как работать с системой GIT: делимся опытом
Шпаргалка по работе с командами git
Git Rebase: руководство по использованию
Git: Восстановить удаленную (удаленную) ветку
Можно ли восстановить ветку после ее удаления в Git?
Как удалить все удаленные ветки git, которые уже были интегрированы?
Откат ошибочной команды git push --force
Как использовать git с несколькими удалёнными репозиториями
git bisect: путешествие по времени и багам
Git Rebase: руководство по использованию
https://dangitgit.com/ru — некоторые простые рецепты для git
https://github.com/EbookFoundation/free-programming-books/blob/main/books/free-programming-books-ru.md#git

Как выложить свой проект на GitHub.com
Как настроить собственный сервер Git
Как настроить свой сервер Gitlab
Создание сайта на github.io с помощью Landing Pages Framework
Создаем свой персональный сайт на Github

https://docs.gitlab.com/ee/ci/
Введение в GitLab CI
Руководство по CI/CD в GitLab для (почти) абсолютного новичка
Настройка GitLab CI/CD

Devcolibri Базовый курс по Git
https://www.youtube.com/playlist?list=PLIU76b8Cjem5B3sufBJ_KFTpKkMEvaTQR
Dmitry Afanasyev Git. Система контроля версий. Видеокурс
https://www.youtube.com/playlist?list=PLoonZ8wII66iUm84o7nadL-oqINzBLk5g
Илья Кантор JavaScript.ru Git: курс
https://www.youtube.com/playlist?list=PLDyvV36pndZFHXjXuwA_NywNrVQO0aQqb
Илья Кантор JavaScript.ru Git: разное
https://www.youtube.com/playlist?list=PLDyvV36pndZEB7kWWocU4QSn-G78LoaEE

Самоучитель
https://learngitbranching.js.org/?locale=ru_RU
Тренажёр
https://git-school.github.io/visualizing-git/
Git-шпаргалка


частые команды
https://docs.gitlab.com/ee/ssh/
ssh-keygen -t rsa -C "email@example.com"
nano ~/.ssh/config
cat ~/.ssh/id_rsa.pub
ssh -T git@gitlab.com

Git global setup
git config --global user.name "user123"
git config --global user.email "user123@example.com"

git config --list
-------------------------------------------------------------------------------------

Создание локального репозитория
git clone [url, например, https://tau.home.local/user/test_project.git] dir_name — создать локальную копию репозитория в каталоге dir_name.


склонировать ТОЛЬКО конкретную ветку
git clone --branch=branch-name https://github.com/project.git

склонировать репозиторий без многолетней истории его коммитов, тогда нужно использовать параметр --depth=5, где 5 - количество коммитов от последнего:
git clone --depth=1 --branch=branch-name http://whatever.git

склонировать ветку и загрузить субмодули
git clone --branch=bookworm --recurse-submodules https://github.com/sonic-net/sonic-buildimage.git

Работа с удаленным репозиторием
git remote                                    — просмотр списка настроенных удаленных репозиториев.
git remote add [shortname] [url]              — добавить удаленный репозиторий и присвоить ему имя.
git remote rename [shortname] [new_shortname] — изменить короткое имя.
git fetch [shortname]                 — загрузка изменений из удаленного репозитория.
git push [remote-name] [branch-name]  — выгрузка изменений в удаленный репозиторий.
git pull [remote-name] [branch-name]  — загрузка изменений с заданной ветки репозитория.
git fetch --all --prune               — получить список актуальных веток
git remote show [remote-name]         — просмотр состояния удаленного репозитория.
git remote rm [shortname]             — удалить удаленный репозиторий из списка.
git push origin --delete              — удалить ветку удаленного (т.е. не локального) репозитория
git tag --delete имя_тега             — удалить тег 
git push -f ветка                     — принудительное изменение ветки удаленного (т.е. не локального) репозитория

git config --local --get remote.origin.url - получить адрес удалённого репозитория
git fetch --prune origin                   - удалит устаревшие ветки, которые у вас есть локально

Коммиты
Обратите внимание: коммиты делаются в локальную копию репозитория. Указанные команды НЕ загружают изменения на сервер. Для изменения удаленного репозитория используйте git push.
git add список_файлов                     — добавить файлы в индекс ( поставить их под версионный контроль). Обычно делается перед коммитом.
git commit -m «Комментарий к коммиту»     — сделать коммит файлов из индекса.
git commit -a -m «Комментарий к коммиту»  — добавить измененные файлы в индекс и сделать коммит
git commit --amend                        —  исправление последнего сообщения о фиксации
git commit --amend --no-edit              — исправление коммита Применяйте команду лишь для коммитов в локальной ветки

изменение коммитов
не изменяйте ваш последний коммит, если вы уже отправили её в общий репозиторий.
git commit --amend -m "Новое название"    — Изменение названия последнего коммита
git rebase -i r reword                    — переименовать коммит e edit изменить коммит s squash склеить два или больше коммитов
git rebase --continue                     — выполнить после успешного коммита
git ls-remote                             — Полный список удалённых ссылок
git fetch                                 — получает с сервера все изменения, которых у вас ещё нет, но не будет изменять состояние вашей рабочей директории

быстро обновить коммит в удалённом репозитории
git commit --amend
git push --force origin ветка

Отмена коммита или операции
git checkout – имя_файла  — отмена изменений из измененного файла.
git reset имя_файла       — удаление добавленного (но не закоммиченного) файла из индекса.
git commit –amend         — команда для изменения коммита.
git reset --hard HEAD~1
git rebase коммит --onto master           — изменения идут с этого коммита
git revert коммит                         — укажите хэш коммита, который хотите отменить
Git создаст изменения, имеющие прямо противоположный эффект по сравнению с изменениями, содержащимися в этом исходном коммите
git revert коммит --no-commit                    — если необходимо проверить эти изменения и зафиксировать их вручную
git checkout [сохранённый хеш] -- путь/к/файлу   — отменить изменения в файле
git reflog                     — посмотреть где находился указатель HEAD в любой момент времени
git reset --hard HEAD@{index}  — вернуться туда, когда всё работало

Работа в локальном репозитории
git checkout -b новая_ветка origin/ветка_из_репозитория  — создание новой локальной ветки
git branch -a             — посмотреть все ветки
git branch -r             — посмотреть ветки в удалённом репозитории
git branch -d             — удалить ветку
git branch -D             — удалить принудительно ветку
git status                — определение состояния файлов.
git add список_файлов     — добавить файлы в индекс ( поставить их под версионный контроль).
git add .                 — добавить все файлы в индекс
git diff                  — просмотр сделанных изменений.
git diff -staged          — сравнение проиндексированных изменений с последним коммитом.
git rm имя_файла          — удаление физически удаленного файла из индекса.
git rm –cached имя_файла  — удаление файла из индекса ( из версионного контроля ) без физического удаления.
git rebase master server  — Это повторит работу, сделанную в ветке server поверх ветки master
git cherry-pick           — для бекпортирования отдельных изменений в долгоживущие ветки
git diff ветка1 ветка2    — для ревью изменений между версиями ветки
git diff origin/ветка ветка_после_черрипика
git bisect                — для бинарного поиска коммита, вносящего баг 
см https://git-scm.com/book/ru/v2/Инструменты-Git-Обнаружение-ошибок-с-помощью-Git
получить разницу коммитов меж ветками
git log --oneline "origin/ветка1..origin/ветка2"
git log --oneline "origin/ветка2..origin/ветка1"

Просмотр истории
git log                 — выдает список коммитов, сделанных в репозитории.
git log -p              — выдает список коммитов с просмотром изменений, сделанных в каждом коммите.
git log -p filename     — найти в каких фиксациях изменялся файл и что именно было изменено 
git log -stat           — выдает список коммитов с просмотром краткой статистики изменений.
git log -pretty=…       — выдает список коммитов, изменяя формат вывода.
git log -since=…        — выдает список коммитов с ограничением по времени. Например, 2.weeks — коммиты за последние 2 недели.
git log -число          — выдает указанное число коммитов.
git log --oneline -n 3  — вывести три верхних коммита

git log --pretty=format:"%h %s" --graph
git log --graph --left-right --cherry-pick --oneline master

Предосмотр
https://www.amitmerchant.com/git-commands-that-you-can-dry-run-before-actually-running-them/
опция --dry-run покажет, что она будет делать, прежде чем фактически запустить команду
git add . --dry-run           — покажет что будет проиндексировано
git clean -df --dry-run       — покажет что будет удалено
git commit --short --dry-run  — кратко покажет что будет зафиксировано
git commit --long --dry-run   — более подробно покажет что будет зафиксировано
git mv --dry-run              — покажет какие файлы будут перемещены

Откат
git reflog                  — показывает журнал ссылки, предоставленной в командной строке (или HEAD, по умолчанию)
git reset HEAD@{index}      — делаем откат изменений в репозитории до состояния index
git checkout master         — Выбираем нужный бранч(ветку) 
git reset --hard HEAD~2     — делаем откат изменений в репозитории для примера на два коммита назад
git reset --hard HEAD hash  — Можно сделать до какого то определенного коммита по хешу
git reset HEAD myfilename   — Отменяем индексирование файла
git clean -f                — отображает файлы, подлежащие удалению
git clean -n                — Удаляем неотслеживаемый файл
git reset --hard            — сбрасывает индекс и рабочее дерево
git clean -f -d -x          — удаляет все изменеия и все неотслеживаемые файлы, включая продукты сборки
git push -f origin master   — делаем принудительный коммит в основной репо на гитхабе
git revert                  — отменить локально и отправить это изменение в удаленную ветку
rm -rf .git                 — Отменяем git init

восстановление
git fsck --lost-found       — обзор оборванных коммитов
git show коммит             — посмотреть содержание коммита
git rebase коммит           — наложение коммитов поверх другого базового коммита
git reflog                  — журнал ссылки
git cherry-pick коммит      — применить изменение коммита в ветку

git reset
–hard — заставляет весь контент соответствовать коммиту, к которому вы сбрасываете (ресетите)
git reset --hard означает git reset --hard HEAD, то есть, не изменяя ветку, избавиться от всех локальных изменений.
–mixed — это опция по умолчанию, то есть git reset означает git reset --mixed. Эта команда сбрасывает индекс, но не рабочее дерево
для изменений нужно проиндексировать, т.е. git add .
--soft не изменяет индекс или рабочее дерево. Все ваши файлы остаются нетронутыми, как если бы вы использовали --mixed, но все изменения показываются как готовые к коммиту во время выполнения
–merge — эта опция добавлена в git относительно недавно, ее предназначение — прервать неудачное (failed) слияние (merge)
HEAD~ — это сокращенная запись HEAD~1 и означает первого родителя коммита. HEAD~2 означает первого родителя у первого родителя коммита. HEAD~n можно понимать как «n коммитов перед HEAD» или «n-ый предок HEAD».
HEAD^ (или HEAD^1) тоже означает первого родителя коммита. Но вот HEAD^2 означает второго родителя коммита

изменения
git stash          — спрятать изменения
git stash -u       — спрятать неотслеживаемые файлы
git stash -a       — включить изменения в игнорируемые файлы
git stash pop      — вернуть спрятанные изменения
git stash list     — посмотреть весь список stash
git stash show     — команда покажет файлы из последнего stash
git stash show -p  — покажет какие изменения лежат в stash
git stash show -p stash@{5}   — узнать какие изменения в git stash под конкретным номером
git stash apply               — как и 
git stash apply stash@{0}     — применяет последний stash
git stash apply stash@{5}     — внесёт изменения, которые хранятся в стэке под 5-ым номером
git stash clear   — удалит все сохранённые в git stash состояния, безвозвратно
git stash drop    — удалить один последний сохранённый git stash
git stash drop stash@{NUMBER} — очистить определённый stash по его номеру

создаем сабмодуль:
git submodule add     --force gitlab:/репа/пакет.git папка_субмодуля 
git submodule sync
git submodule update  --init --remote
обновить субмодуль адрес и версию 
vim .gitmodules
git config --file=.gitmodules -e
git submodule sync
git submodule update --remote
git submodule update --init --recursive --remote
git submodule update --recursive --remote
если не грузится субмодуль
git submodule init
git submodule update --remote


git reflog show HEAD
git reflog --relative-date
git reflog --no-abbrev
git fsck --full --no-reflogs | grep commit
git reset --hard your_deleted_commit
git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\  -f3 | xargs -n 1 git log -n 1 --pretty=oneline > .git/lost-found.txt
find . -ctime -12h -type f | sed 's/[./]//g' | git cat-file --batch-check | grep commit
git cat-file -p <your commit>
git log -p <your commit>
git branch commit_rescued <your commit>
git checkout -b <branch> <sha>
git branch -m <restored branch> <final branch>
git stash — положить во временное хранилище все отслеживаемые файлы.
git stash pop — восстановить последние файлы, положенные во временное хранилище.
git stash list — список всех сохраненных изменений во временном хранилище.
git stash drop — удалить последние файлы, положенные во временное хранилище.
git-resurrect <name>
git stash save
git merge origin/master
git stash pop
gitk --reflog
git rebase -i HEAD~n
git reset HEAD^
git reset HEAD~1 --hard 
откат
git reflog - выведет все список всех действий
git reset HEAD@{index}
git checkout master  - Выбираем нужный бранч(ветку) 
git reset --hard HEAD~2  - делаем откат изменений в репозитории для примера на два коммита назад
git reset --hard HEAD hash  - Можно сделать до какого то определенного коммита по хешу
git reset HEAD myfilename - Отменяем индексирование файла
git clean -f - отображает файлы, подлежащие удалению
git clean -n - Удаляем неотслеживаемый файл
git push -f origin master  - делаем принудительный коммит в основной репо на гитхабе
rm -rf .git - Отменяем git init


найти ближайший коммит по дате
git log --oneline --before='2021-01-20' -1

https://overcoder.net/q/13265/как-выборочно-объединить-или-выбрать-изменения-из-другой-ветки-в-git
git diff origin/master origin/master123 files - сравнить файл из разных веток
Если нужно отменить изменения в отдельном файле, то подойдет команда git checkout имя_файла
git checkout 3f25701874aa5a2c16cc6275fa30baa5b6e477a6 имя_файла
git merge --no-ff --no-commit -s ours branchname1
git checkout --patch exp1 file_to_merge
git diff branch_b > my_patch_file.patch
git apply -p1 --include=pattern/matching/the/path/to/file/or/folder my_patch_file.patch
Если вы не хотите объединять file1 и хотите сохранить версию в текущей ветке
git checkout HEAD file1
Если вы не хотите объединять file2 и хотите только версию в branchX
git checkout branchX file2
проверить, как было выполнено слияние, запустив git diff --cached
git diff --cached file1

quit — выходит из интерактивной консоли;
git commit --amend
git rebase --continue
git log --pretty=format:"%h %s" --graph
git log --graph --left-right --cherry-pick --oneline master


git branch -m new-name - переименовать ветку
git branch -m old-name new-name
git push origin :old-name new-name переименовать удалённую ветку
быстрый способ:
git push origin -u new-name
git branch -m old_branch new_branch         # Rename branch locally
git push origin :old_branch                 # Delete the old branch
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote
изменение коммитов
не изменяйте ваш последний коммит, если вы уже отправили её в общий репозиторий.
git commit --amend -m "Новое название"  - Изменение названия последнего коммита
git rebase -i r reword переименовать коммит e edit изменить коммит s squash склеить два или больше коммитов
git rebase --continue  - выполнить после успешного коммита
git ls-remote  - Полный список удалённых ссылок
git fetch  - получает с сервера все изменения, которых у вас ещё нет, но не будет изменять состояние вашей рабочей директории

git stash для временного сохранения изменений
git rebase -i для причёсывания коммитов во время разработки
git reset во всех своих ипостасях (откат, разбиение коммитов, и т. д.)
git reflog для отката своего репозитория, если случайно ветку
git cherry-pick для бекпортирования отдельных изменений в долгоживущие ветки
git diff origin/ветка ветка_после_черрипика
git range-diff для ревью изменений между версиями ветки
git bisect для поиска коммита, вносящего баг
git revert для отката изменений, вносящих баги
git log -S для поиска коммита по диффу
git rerere для особо долбанутых мерджей с конфликтами

git revert коммит - откатить коммит (коммит обратный этому)

git name-rev --name-only $(git branch | cut -d ' ' -f 5 | tr -d ')') 
git name-rev --name-only $(git branch | cut -d ' ' -f 5 | tr -d ')') |cut -d '/' -f 3 
git describe
git show-branch |cut -d ' ' -f 1 |tr -d '['  |tr -d ']'


5 малоизвестных Git-приёмов 1⃣ git reflog — история всех ваших шагов Не только коммиты, но и переключения веток, сбросы и прочие «хаки»: git reflog # вернёт список всех HEAD-перемещений git checkout HEAD@{3} # вернёт вас на три шага назад 2⃣ git rerere — повторное разрешение конфликтов Если в одной и той же точке вы часто сталкиваетесь с конфликтами, включите rerere: git config —global rerere.enabled true # при повторном конфликте Git запомнит ваше решение 3⃣ git bisect — автоматический поиск «битого» коммита Когда баг появился неясно где, let Git do the detective work: git bisect start git bisect bad # текущая версия с багом git bisect good v1.0 # последний рабочий тег # Git сам предложит вам протестировать промежуточные коммиты 4⃣ git stash push -m — храни временные изменения с заметкой Чтобы не забыть, зачем вы сохраняете рабочие правки: git stash push -m "WIP: эксперимент с OAuth" git stash list # будет видно вашу подпись 5⃣ git worktree — несколько рабочих копий одного репозитория Для одновременной работы над фичами и багфиксами без переключений: git worktree add ../my-feature-branch feature/X cd ../my-feature-branch # у вас рядом две папки: main и my-feature-branch
------------------------------------------------------------------------------------- формируем ветку open-source git checkout master # COMMIT_SHA - хэш коммита, который соотвествует исходникам наиболее близким к текущей ванильной версии git checkout COMMIT_SHA git checkout -b open-source git push origin open-source коммитим новую версию git rm -rf . cp -rfvP --preserve=all NEW/SRC/PATH/. ./ git add -f . git commit -m "version NEW_VERSION" git push origin open-source создаём тэг ванильных исхоников новой версии git tag -a -m "vanilla version NEW_VERSION" vNEW_VERSION-vanilla git push origin vNEW_VERSION-vanilla создаём ветку для обновления master git checkout master git checkout -b upgrade-NEW_VERSION git merge vNEW_VERSION-vanilla git commit -m "update with version NEW_VERSION" git push origin upgrade-NEW_VERSION фиксим git checkout master -- * git checkout master -- *.py



клонировать проекты группы в GitLab
GitLab: склонировать список репозиториев
Список репозиториев: https://your-gitlab-host/api/v4/projects?per_page=1000
список для группы проектов: https://your-gitlab-host/api/v4/groups/{group-id}/projects?per_page=1000
https://your-gitlab-host/api/v4/groups/{group-id}/projects?per_page=9999&page=1&include_subgroups=true

Выкачать (в текущий каталог) репозитории по списку из файла:




Как клонировать сразу все проекты группы в GitLab?








Чтобы включить подгруппы, добавьте include_subgroups=trueпараметр запроса, например
https://<your-host>/api/v4/groups/<group_id>?include_subgroups=true



Обновление списка репозиториев




скрипты на питоне








скрипт на баше, выкачивает с вложенными подгруппами




https://github.com/adroste/gitlab-clone-group
python3 gitlab-clone-group.py --token 'токен' --gitlab-domain gitlab.домен группа_которую_склонировать /путь/каталог_куда_клонировать

https://github.com/gabrie30/ghorg
ghorg clone group3 --base-url=https://<your.instance.gitlab.com> --scm=gitlab --token=XXXXXX --preserve-dir

https://github.com/ezbz/gitlabber
gitlabber -t <personal access token> -u <gitlab url> -i '/MyGroup**' ~/GitlabRoot


ошибки
из за
https://github.com/vitejs/vite/blob/main/.gitattributes
* text=auto eol=lf
сыпятся ошибки при создании веток, git config --global core.autocrlf false не помогает, нужно оставить только
* text=auto

Profile

uzverss: (Default)
uzverss

December 2024

S M T W T F S
12345 67
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 07:53 pm
Powered by Dreamwidth Studios