работа с Git
May. 3rd, 2016 11:09 pm
развернуть
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
Как выложить свой проект на 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 ']' ------------------------------------------------------------------------------------- формируем ветку 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