Jurik-Phys.Net

~ Простота и ясность ~

Инструменты пользователя

Инструменты сайта


itechnology:git

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
itechnology:git [2019/03/25 18:37] – [Создание нового проекта] jurik_physitechnology:git [2024/04/19 07:33] (текущий) – [Типичные задачи] jurik_phys
Строка 119: Строка 119:
 </code>  </code> 
  
 +==== Восстановить файл из коммита ====
 +
 +<code bash># восстановить файл main.cpp из коммита 965ee26
 +git checkout 965ee26 -- main.cpp</code>
 ==== Отменить коммит ==== ==== Отменить коммит ====
 <code bash> <code bash>
Строка 130: Строка 134:
 git rebase -i commit_sha~1 git rebase -i commit_sha~1
 </code> </code>
 +Пример объединения нескольких коммитов в один по [[https://ru.stackoverflow.com/a/462268|ссылке]].
 ==== Просмотр истории коммитов ==== ==== Просмотр истории коммитов ====
 Две удобные конструкции, идущие из коробки: Две удобные конструкции, идущие из коробки:
Строка 152: Строка 156:
 </code> </code>
  
 +==== Именование коммитов ====
 +
 +Вариант №1 рекомендаций по именованию коммитов ([[https://habr.com/ru/post/673344/ |ссылка]]):
 +<code><type> <description></code>
 +
 +| **Fix** |коммит, который устраняет баг |
 +| **Feat** | коммит, который содержит новый функционал  |
 +| **Chore** | коммит, который не устраняет баг и не вносит новый функционал, а модифицирует или обновляет зависимости  |
 +| **Refactor** | этот коммит содержит рефакторинг, который включает рефакторинг кода или изменения  |
 +| **Docs** | этот коммит изменяет документацию,  readme.md или markdown файлы |
 +| **Style** | коммит, который вносит изменения в оформление кода |
 +| **Test** | коммит, который изменяет тестовый файл, включая изменения  |
 +| **Perf** | коммит, в котором улучшается производительность  |
 +| **Ci** | коммит, в котором содержатся изменения в интеграции CI в файлах или скриптах  |
 +| **Build** | это файлы, которые включают файлы сборки и зависимости  |
 +| **Revert** | коммит, который сигнализирует об откате к предыдущему коммиту  |
 +
 +Вариант №2 ([[https://habr.com/ru/articles/416887/|ссылка]])
 +
 +  - Отделяйте заголовок от тела пустой строкой.
 +  - Ограничивайте заголовок 50 символами.
 +  - Пишите заголовок с заглавной буквы.
 +  - Не ставьте точку в конце заголовка.
 +  - Используйте повелительное наклонение в заголовке
 +    * Это не повелительное наклонение, а опущенное подлежащее во множественном числе. <del>This changes</del> fix accidental crush — <del>Эти изменения</del> чинят внезапные падения. \\ <wrap>
 +If applied, this commit will **Refactor subsystem X for readability** \\
 +If applied, this commit will **Update getting started documentation** \\
 +If applied, this commit will **Remove deprecated methods** \\
 +If applied, this commit will **Release version 1.0.0**</wrap>
 +  - Переходите на следующую строку в теле на 72 символах.
 +  - В теле отвечайте на вопросы «что» и «почему», а не «как»
 ===== Ветки ===== ===== Ветки =====
 ==== Создание локальной ветки ==== ==== Создание локальной ветки ====
Строка 158: Строка 193:
 git checkout new_branch  # переключение на новую ветку git checkout new_branch  # переключение на новую ветку
 </code> </code>
-==== Объединение веток ====+==== Слияние веток ====
 <code bash> <code bash>
 # переход на ветку в которую будут сливаться изменения # переход на ветку в которую будут сливаться изменения
Строка 165: Строка 200:
 git merge devel_branch git merge devel_branch
 </code> </code>
-==== Просмотр всех веток, включая удалённые ====+==== Список всех веток ====
 <code bash> <code bash>
 git branch -a git branch -a
Строка 171: Строка 206:
  
 ==== Удаление ветки ==== ==== Удаление ветки ====
-<code bash> + 
-# удаление удалённой ветки +  * Локальный репозиторий:<code bash>git branch -d local_branch</code
-git push server :remote_branch  +  * Удалённый репозиторий:<code bash>git push server :remote_branch </code> 
-# удаление локальной ветки + 
-git branch -d local_branch +==== Переименование ветки ==== 
-</code>+ 
 +  * Локальный репозиторий: 
 +    * Текущая ветка (-m сокращение от --move):<code bash>git branch -m <newname></code> 
 +    * Произвольная ветка: <code bash>git branch -m <oldname> <newname></code> 
 +  * Удалённый репозиторий: 
 +    * Отправка новой ветки на сервер: <code bash>git push origin -u <newname></code> 
 +    * Удаление старой ветки на сервере:<code bash>git push origin --delete <oldname></code> 
  
 ==== Вытянуть удалённую ветку ==== ==== Вытянуть удалённую ветку ====
Строка 319: Строка 361:
 ===== Метки ===== ===== Метки =====
 ==== Создание меток ==== ==== Создание меток ====
-<code bash> +  * Аннотированные метки (рекомендуется)<code bash>git tag -a vX.Y -m "Project version X.Y"</code> 
-git tag tag_name +  * Легковесные метки<code bash>git tag vX.Y</code>
-</code>+
  
 ==== Просмотр меток ==== ==== Просмотр меток ====
-<code bash> +  * Общий список:<code bash>git tag</code> 
-git tag +  * Подробности по тегу "tag_name":<code bash>git show --no-patch tag_name</code>
-</code>+
  
 ==== Отправка меток на сервер  ==== ==== Отправка меток на сервер  ====
-<code bash> +  * По умолчанию, команда git push не отправляет теги на удалённые сервера. После создания теги нужно отправлять явно на удалённый сервер<code bash>git push origin --tags</code>
-git push origin --tags +
-</code>+
 ===== Разрешение конфликтов ===== ===== Разрешение конфликтов =====
  
 ==== Настройка инструментов ==== ==== Настройка инструментов ====
-<code bash> +<WRAP indent><WRAP indent><code bash># установка vimdiff в качестве инструмента разрешения конфликтов
-# установка vimdiff в качестве инструмента разрешения конфликтов+
 git config --global merge.tool vimdiff git config --global merge.tool vimdiff
 # не создавать *.orig файлов  # не создавать *.orig файлов 
 git config --globasl mergetool.keepBackup false git config --globasl mergetool.keepBackup false
 </code> </code>
 +</WRAP></WRAP>
  
 ==== Появление конфликта слияния ==== ==== Появление конфликта слияния ====
 +<WRAP indent><WRAP indent>
 <code bash> <code bash>
 # установка текущей ветки (master) # установка текущей ветки (master)
Строка 353: Строка 392:
 git config --globasl mergetool.keepBackup false git config --globasl mergetool.keepBackup false
 </code> </code>
 +</WRAP></WRAP>
  
 ** Можно посмотреть детали конфликта: ** ** Можно посмотреть детали конфликта: **
 +<WRAP indent><WRAP indent>
 <code bash> <code bash>
 git status git status
Строка 366: Строка 407:
 # #
 </code> </code>
 +</WRAP></WRAP>
 ==== Запуск процесса разрешения конфликтов ==== ==== Запуск процесса разрешения конфликтов ====
 +<WRAP indent><WRAP indent>
 <code bash> <code bash>
 git mergetool git mergetool
 </code> </code>
 +</WRAP></WRAP>
 +
  
 ==== Описание vimdiff ==== ==== Описание vimdiff ====
Строка 597: Строка 642:
 P.S. также в настройках сайта апача необходимо AllowOverride None заменить на AllowOverride All P.S. также в настройках сайта апача необходимо AllowOverride None заменить на AllowOverride All
 ===== Разное ===== ===== Разное =====
 +
 +
  
  
  
 ==== Настройка git ==== ==== Настройка git ====
 +
 === Идентификация пользователя === === Идентификация пользователя ===
  
Строка 640: Строка 688:
 </code> </code>
  
-{{tag>git}}+ 
 +===== Частые сценарии ===== 
 +<hidden -noprint onHidden="![  ▸ ]! Создание локальной ветки" onVisible="![  ▾ ]! Создание локальной ветки"> 
 + 
 +  * Вариант №1 
 +    * Создание ветки <code bash>git branch BR-NAME</code> 
 +    * Верификация созданной ветки <code bash>git branch  
 +... 
 +BR-NAME 
 +...</code> 
 +    * Переключение на созданную ветку<code bash>git checkout BR-NAME 
 +Переключено на ветку «BR-NAME»</code> 
 +  * Вариант №2 
 +    * Создание и переключение на ветку одной командой <code bash>git checkout -b BR-NAME 
 +Переключено на новую ветку «DEL_BR» </code> 
 +</hidden> 
 + 
 +<hidden -noprint onHidden="![  ▸ ]! Переключение текущей ветки" onVisible="![  ▾ ]! Переключение текущей ветки"> 
 +  * Список веток:<code bash>git branch</code> 
 +  * Переключение текущей ветки:<code bash>git checkout BRANCH_NAME</code> 
 +</hidden> 
 + 
 +<hidden -noprint onHidden="![  ▸ ]! Влить отдельный коммит в текущую ветку" onVisible="![  ▾ ]! Влить отдельный коммит в текущую ветку"> 
 +  * Может понадобиться, для включения отделённого коммита.<code>git cherry-pick commit_sha~1</code> 
 +</hidden> 
 + 
 +<hidden -noprint onHidden="![  ▸ ]! Переход к предыдущему коммиту" onVisible="![  ▾ ]! Переход к предыдущему коммиту"> 
 +  * Когда необходимо вернуться к предыдущей версии кода:<code>git checkout commit_sha~1</code> 
 +  * При необходимости сохранения изменений можно: 
 +      - Cоздать ветку:<code bash>git branch new_branch</code> 
 +      - Переключиться на созданную ветку:<code bash>git checkout branch new_branch</code> 
 +      - Сохранить коммит:<code bash>git commit -a</code> 
 +</hidden> 
 + 
 + 
 +<hidden -noprint onHidden="![  ▸ ]! Откатить изменения к последнему коммиту" onVisible="![  ▾ ]! Откатить изменения к последнему коммиту"> 
 +  * Когда стало ясно, что сделанные изменения в коде ошибочны<code>git reset --hard HEAD</code> 
 +</hidden> 
 + 
 +===== Работа с GitHub ====== 
 +==== Первый запуск ==== 
 + 
 +=== Генерация ключей SSH === 
 +  
 +Для работы с сервисом GitHub через терминал по протоколу SSH необходимо один раз сгенерировать ключи шифрования и публичный добавить в аккаунт в раздел "Settings->SSH and GPG keys"
 + 
 +Процесс генерации ключей описан по [[ https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent |ссылке]]. 
 + 
 + 
 + 
 +**Проверка соединения с github через ssh**<code>ssh -T git@github.com</code> В первый раз необходимо одобрить подключение в ответ на запрос вида<code> 
 +The authenticity of host 'github.com (IP ADDRESS)' can't be established. 
 +RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCBCLviKw6E5SY8. 
 +Are you sure you want to continue connecting (yes/no)?</code> 
 + 
 +=== Коммит от имени аккаунта GitHub === 
 + 
 +GitHub использует email адрес для ассоциации отправленных коммитов с аккаунтом GitHub. 
 + 
 +Чтобы связать коммиты с аккаунтом GitHub: 
 +  * [[https://github.com/settings/emails|убедитесь]], что какой-нибудь email привязан к аккаунту GitHub, в настройках аккаунта; 
 +  * установите тот же самый email в настройках Git или репозитория:<code bash>git config --global user.email "ваш-github-email@example.com"</code> 
 +  * создайте какие-нибудь коммиты (git commit -a) и отправьте их (git push) в GitHub. 
 + 
 +После этого GitHub признает Вас, и все новые коммиты будут подписаны вашим аккаунтом со ссылкой на него, а не просто именем. Подробности по [[https://ru.stackoverflow.com/a/849771|ссылке]]. 
 + 
 +==== Типичные задачи ==== 
 + 
 +**Создание пустого репозитория:**  
 +  * создать новый репозиторий на странице <<[[https://github.com/new|Create a new repository]]>> 
 +  * клонировать созданный репозиторий на локальной машине:<code bash>git clone git@github.com/USERNAME/REPOSITORY.git</code>В текущем каталоге появится подкаталог REPOSITORY - это и есть каталог нового проекта. 
 + 
 +**Создание GitHub репозитория под существующий локальный проект:** 
 +  * создать новый репозиторий на странице <<[[https://github.com/new|Create a new repository]]>> 
 +  * войти в каталог с проектом и подключить удалённый репозиторий командой <code bash>git remote add origin git@github.com:USERNAME/REPOSITORY.git</code> 
 +  * просмотреть список удалённых репозиториев:<code bash>git remote</code> 
 +  * а) отправить все ветки на удалённый репозиторий:<code bash>git push origin --all</code> 
 +  * б) отправить только локальную ветку main:<code bash>git push -u origin main</code> 
 + 
 +**Переименовать или удалить репозиторий** можно на странице: <code>https://github.com/USERNAME/REPOSITORY/settings</code> 
 + 
 +**Добавление уже созданного на github'е репозитория**<code>git remote add origin git@github.com:USERNAME/REPOSITORY.git</code>
 ===== Дополнительные материалы git =====  ===== Дополнительные материалы git ===== 
   - [[http://ru.wikipedia.org/wiki/Git| Статья в википедии]]   - [[http://ru.wikipedia.org/wiki/Git| Статья в википедии]]
Строка 646: Строка 775:
   - [[http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru/ch01.html|Волшебство Git]]   - [[http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/ru/ch01.html|Волшебство Git]]
  
 +{{tag>git}}
itechnology/git.1553528266.txt.gz · Последнее изменение: 2019/03/25 18:37 — jurik_phys