service:git
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
service:git [30.05.2023 10:47] – [Развёртывание на несколько окружений] viacheslav | service:git [20.02.2025 13:10] (текущий) – [Создать ветку локально и затем создать её на удалённом сервере] viacheslav | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Git ====== | ||
+ | <code bash> | ||
+ | # Для начала надо настроить имя и email для авторизации. | ||
+ | git config --global --edit # либо | ||
+ | vi ~/ | ||
+ | git config --global user.name ivanpetrov | ||
+ | git config --global user.email i.petrov@example.com | ||
+ | |||
+ | # Некоторые поля для настройки | ||
+ | # core.editor - редактор сообщений коммитов | ||
+ | # commit.template - шаблон, | ||
+ | # alias - псевдоним, | ||
+ | git config --global alias.st " | ||
+ | git st # вместо | ||
+ | git status -s | ||
+ | |||
+ | # Прокси | ||
+ | git config --global http.proxy http:// | ||
+ | git config --global https.proxy http:// | ||
+ | |||
+ | # Вывести все поля с их значениями | ||
+ | git config --list | ||
+ | |||
+ | git init # создать репозиторий | ||
+ | git clone <repo address> # копировать репозиторий | ||
+ | </ | ||
+ | |||
+ | В своих обычных операциях Git [[https:// | ||
+ | - HEAD - Последний коммит в репозитории | ||
+ | - Индекс - Снимок следующего намеченного коммита (staging area, подготовленные файлы) | ||
+ | - Рабочий каталог - локальная рабочая папка | ||
+ | |||
+ | '' | ||
+ | * Untracked - левый файл, git о нём не знает (с ключом '' | ||
+ | * Modified - изменён, | ||
+ | * Staged - готов к коммиту (с ключом '' | ||
+ | * Unmodified - изменений нет, актуальная версия. | ||
+ | |||
+ | ===== Изменения/ | ||
+ | <code bash> | ||
+ | git diff # сравнение рабочего каталога с индексом (область подготовленных файлов) | ||
+ | git diff --staged # сравнить индекс с HEAD (непроиндексированные изменения показаны не будут) | ||
+ | git diff folder/ # показать изменения только для указанной папки | ||
+ | </ | ||
+ | |||
+ | ===== Обновление/ | ||
+ | <code bash> | ||
+ | git add < | ||
+ | git commit # обновить HEAD | ||
+ | </ | ||
+ | |||
+ | ===== Игнорирование ===== | ||
+ | Файлы с паролями и т. п. - файл '' | ||
+ | <code bash> | ||
+ | # ignores all .txt files JUST in the current folder | ||
+ | *.txt | ||
+ | # ignores all .txt recursive from the current folder | ||
+ | **.txt | ||
+ | # ignores all .txt in subdirectories recursive from the current | ||
+ | # folder (does not include the current folder) | ||
+ | **/*.txt | ||
+ | # ignore files only in the directory with the .gitignore file - leading “/” | ||
+ | /*.txt | ||
+ | |||
+ | # A .gitignore file in the root directory with these contents: | ||
+ | / | ||
+ | # will ignore all .txt files in the content directory. It will not ignore .txt files in the subdirectories of the content directory. | ||
+ | </ | ||
+ | https:// | ||
+ | https:// | ||
+ | |||
+ | ===== Удалённые репозитории ===== | ||
+ | <code bash> | ||
+ | git remote -v # список удалённых репозиториев с заданными именами | ||
+ | git remote add < | ||
+ | git remote remove < | ||
+ | git remote rename <old name> <new name> | ||
+ | git remote set-url < | ||
+ | git remote show < | ||
+ | |||
+ | git fetch < | ||
+ | git pull < | ||
+ | git push < | ||
+ | # Если локальная ветка уже отслеживает удалённую, | ||
+ | git push | ||
+ | git pull | ||
+ | </ | ||
+ | Перенастроить локальный репозиторий с одного удалённого на другой | ||
+ | <code bash> | ||
+ | git remote show # показать название удалённого репозитория | ||
+ | origin | ||
+ | git remote get-url origin # показать ссылку | ||
+ | git remote set-url origin <url> # установить новую | ||
+ | </ | ||
+ | ===== Коммиты ===== | ||
+ | Коммит - это некий снапшот ФС и отсылки на предыдущие снапшоты. Содержит контрольную сумму, которую git использует для ссылки на него. | ||
+ | <code bash> | ||
+ | git commit # открыть редактор для сообщения в коммите | ||
+ | git commit -m "Bug fixed" # можно и без редактора | ||
+ | git commit -a # Коммитить модифицированные файлы напрямую, | ||
+ | git commit -amend # заменить последний коммит - на случай, | ||
+ | |||
+ | git revert # создать новый коммит, | ||
+ | git reset # откатить коммит с перемещением указателя HEAD (без сохранения истории). | ||
+ | # Опции: --mixed (по умолчанию) - изменения станут неиндексированными, | ||
+ | |||
+ | # бесследный откат последнего коммита | ||
+ | git reset --hard HEAD~1 | ||
+ | # --force - для того, чтобы игнорировать предупреждение о том, | ||
+ | # что удалённый репозиторий новее | ||
+ | git push --force | ||
+ | </ | ||
+ | https:// | ||
+ | |||
+ | На коммит можно ссылаться как через контрольную сумму, так и на позицию относительно HEAD, например, | ||
+ | |||
+ | Перенос коммита, | ||
+ | '' | ||
+ | |||
+ | С откатыванием коммитов слияния сложнее. [[https:// | ||
+ | |||
+ | Куча мелких коммитов делает историю проекта замусоренной, | ||
+ | <code bash> | ||
+ | # интерактивное сжатие | ||
+ | git cherry -v main # показать сделанные коммиты в сравнении с веткой main | ||
+ | git rebase -i HEAD~3 # -i - интерактивно, | ||
+ | # pick - первый коммит | ||
+ | # squash - коммиты, | ||
+ | |||
+ | # сжатие при слиянии веток - коммиты из feature будут объединены и слиты с текущей веткой | ||
+ | git merge --squash feature | ||
+ | </ | ||
+ | ===== Ветки ===== | ||
+ | Ветки - версии проекта. По умолчанию - master или main. Лучше называть понятно в соответствии с предназначением - release, dev, test и т. д. Переключение между ветками - это перемещение указателя HEAD в HEAD соответствующей ветки. | ||
+ | <code bash> | ||
+ | git branch dev # создать новую ветку dev | ||
+ | git checkout dev # переключиться на ветку dev | ||
+ | git checkout -b dev # создать ветку и переключиться на неё | ||
+ | git branch -d dev # удалить | ||
+ | </ | ||
+ | Когда отслеживается удалённый репозиторий, | ||
+ | <code bash> | ||
+ | git branch -u origin/ | ||
+ | git checkout --track origin/ | ||
+ | git checkout -b serverfix origin/ | ||
+ | git branch -vv # показать локальные и отслеживаемые удалённые ветки | ||
+ | git checkout origin/ | ||
+ | </ | ||
+ | '' | ||
+ | |||
+ | Слияние веток (merge) - создание коммита, | ||
+ | <code bash> | ||
+ | # Переключиться на основную ветку main | ||
+ | git checkout main | ||
+ | # и выполнить слияние с веткой feature | ||
+ | git merge feature | ||
+ | </ | ||
+ | {{: | ||
+ | |||
+ | Если обе ветки меняют одну и ту же часть кода, то возникает конфликт, | ||
+ | |||
+ | Rebase - копирует коммиты тематической ветки в основную, | ||
+ | {{: | ||
+ | <code bash> | ||
+ | # копировать изменения ветки feature на ветку main | ||
+ | git rebase main feature | ||
+ | </ | ||
+ | |||
+ | Merge создаёт некий хаос в логах истории. Rebase в этом плане более последователен, | ||
+ | |||
+ | ==== Изменить ссылку на удалённый репозиторий (для переезда на другой сервер) ==== | ||
+ | <code bash> | ||
+ | git remote show # показать имя удалённого репозитория | ||
+ | git remote get-url origin # показать ссылку | ||
+ | git remote set-url origin git@example.com: | ||
+ | git push # отправить данные в новый удалённый репозиторий | ||
+ | </ | ||
+ | ==== Создать ветку локально и затем создать её на удалённом сервере ==== | ||
+ | <code bash> | ||
+ | git checkout -b new-branch | ||
+ | git branch -u origin/ | ||
+ | git push | ||
+ | </ | ||
+ | |||
+ | ==== Создать пустую ветку без файлов ==== | ||
+ | <code bash> | ||
+ | git switch --orphan <new branch> | ||
+ | git commit --allow-empty -m " | ||
+ | git push -u origin <new branch> | ||
+ | </ | ||
+ | https:// | ||
+ | |||
+ | |||
+ | ===== Просмотр изменений ===== | ||
+ | <code bash> | ||
+ | git log -p # показать изменения в каждом коммите | ||
+ | git log -stat # вывести краткую статистику для коммитов - изм. файлы, кол-во изм. строк | ||
+ | git log -7 # 7 посл. коммитов | ||
+ | git log -since=" | ||
+ | git log -pretty=format:" | ||
+ | git log -grep string # поиск добавления/ | ||
+ | git log --author=< | ||
+ | git log main..test # каких коммитов из test нет в main | ||
+ | git log --left-right main..test # показать уникальные коммиты для обеих веток, где они расположены | ||
+ | git log -L< | ||
+ | git blame -L 1,5 README.md # Кто вносил изменения в диапазон указанных строк | ||
+ | git grep # поиск по регулярке по всем файлам в истории коммитов -n - показать номер строки, | ||
+ | </ | ||
+ | https:// | ||
+ | |||
+ | ===== Схема ===== | ||
+ | {{: | ||
+ | |||
+ | **Clone and Checkout** | ||
+ | |||
+ | In order to start making changes, you must first clone and checkout the repository, and then create a branch to begin your edits.\\ | ||
+ | On your local terminal, the commands or these actions are: | ||
+ | <code bash> | ||
+ | git clone <clone with ssh> | ||
+ | # or | ||
+ | <clone with https> | ||
+ | git checkout -b < | ||
+ | </ | ||
+ | |||
+ | **Add and Commit** | ||
+ | |||
+ | To make additions to your branch, you will use the following commands: | ||
+ | <code bash> | ||
+ | # Stage the file | ||
+ | git add < | ||
+ | # Run git status | ||
+ | git status | ||
+ | # Commit the file | ||
+ | git commit -m " | ||
+ | # Run git status | ||
+ | git status | ||
+ | # Push the commit to the remote | ||
+ | git push origin < | ||
+ | # and for an initial push to branch | ||
+ | git push -u origin... | ||
+ | # Run git status | ||
+ | git status | ||
+ | # View the git log | ||
+ | git log | ||
+ | </ | ||
+ | ===== Советы ===== | ||
+ | * Одно изменение - один коммит. Так проще откатиться. | ||
+ | * Сообщение коммита - заголовок меньше 50 символов, | ||
+ | * При разработке делать небольшие коммиты, | ||
+ | |||
+ | ===== Ошибки/ | ||
+ | ==== Ругань на SSL-сертификат ==== | ||
+ | [[https:// | ||
+ | - Использовать SSH при работе с git | ||
+ | - Отключить проверку ssl сертификата при клонировании <code bash> | ||
+ | - Отключить проверку ssl сертификата глобально <code bash>git config --global http.sslVerify false</ | ||
+ | - Если сертификат самоподписанный - найти инструкцию по добавлению самоподписанного сертификата в доверенные | ||
+ | |||
+ | ===== Литература ===== | ||
+ | [[https:// | ||
+ | https:// | ||
+ | |||
+ | ===== Обучение ===== | ||
+ | https:// | ||
+ | |||
+ | |||