Commands

Принудительно записать изменения в репозиторий.

git push -f
git push --force

Принудительно записать изменения в репозиторий. Безопасный вариант с отменой.

git push --force-with-lease

Отменить слияние.

git rebase --abort

Теги

git tag -a 1.0.0 -m "1.0.0" // создать тег
git push origin X.X.X // запушить тег в удаленный репозиторий
git tag -d X.X.X // удалить тег
git push -—delete origin X.X.X // удалить тег в удаленном репозитории

Показать журнал коммитов.

git log --oneline 1.0.0..2.0.0

Установить глобального пользователя для системы

git config --global user.name "michaelbel"
git config --global user.email michael-bel@outlook.com

Установить локального пользователя для выбранного репозитория

git config user.name "michaelbel"
git config user.email michael-bel@outlook.com

Draft a new release

• Создаем PR develop to master с именем новой версии
• На гитхабе включаем Settings → General → Pull Requests → Allow merge commits
• Выбираем Create Merge Commit и мерджим
• На гитхабе выключаем Settings → General → Pull Requests → Allow merge commits
• В IDE переключаемся на ветку master, обновляем ее, ПКМ -> Update (Rebase)
• git tag -a X.X.X -m «X.X.X»
• git push origin X.X.X
• Github → Releases → Draft a new release → Choose a tag → Generate release notes → Publish release (релиз может создавать ci)

Влить обновлённый master в develop

• В IDE checkout to develop
• В IDE ПКМ по master -> Rebase «develop» onto «master»
• Github -> Settings -> Branches -> develop Edit
• Require a pull request before merging (выключаем)
• Allow force pushes (включаем для Everyone)
• В IDE git push —force-with-lease
• Github -> Settings -> Branches -> develop Edit
• Require a pull request before merging (включаем)
• Allow force pushes (выключаем)

Подтянуть изменения из develop в мою feature-ветку

• Подтянуть свежие изменения в develop
• Переключиться на feature-ветку, выбрать в списке develop, выбрать Rebase Current onto Selected
• Разрешить возможные конфликты
• Запушить ветку в удаленный репозиторий командой git push —force-with-lease (это избавит от необходимости мерджить изменения перед обычным пушем)

Порешать конфликты

• Создать новую ветку из develop
• Черри-пикнуть коммиты из старой ветки
• Удалить старую ветку
• Запушить новую ветку

• Rebase current onto selected (даже с предупреждением)
• git push —force-with-lease (Будет 1 коммит, сохранить старое название)

Добавить изменения из другой ветки временно

Открываем Git, выбираем ветку, выбираем файл, ПКМ - Compare with local, применяем изменения.

Unresolved conflicts. can’t commit changes due to unresolved conflicts

Нажать Cancel. Изменения должны будут остаться незакоммиченными.

Cherry-pick failed. your local changes would be owerwritten by cherry-pick

git status
git restore --staged  core/src/main/java/com/example/app/NetworkProvider.kt

В новом коммите откатить изменения

Открываем файлы в коммите, ПКМ -> Compare before with local.

Откатить изменения в ветке к выбранному коммиту

ПКМ по коммиту → Reset Current Branch to Here.

Откатиться к предыдущему коммиту (сделанный будет удален) и удалить изменения из удаленного репозитория без следов. этот же способ также помогает отменить слияние в какую-либо ветку, переключаешься на ветку и откатываешься к предыдущему коммиту до слияния, затем делаешь форс-пуш в эту ветку

git reset --hard c3bcdbd0 (предыдущий стабильный коммит)
git push --force-with-lease

Правой кнопкой на коммит - Revert Commit и форс пуш.