GIT Flashcards
Что такое Git Flow
https://www.atlassian.com/ru/git/tutorials/comparing-workflows/gitflow-workflow
rebase vs merge
Git Merge и Git Rebase преследуют одну и ту же цель. Они предназначены для интеграции изменений из одной ветки в другую.
Ситуация: отделили фича-ветку от мастера и работаем. Тем временем в мастер добавляются новые коммиты и мы хотим подтянуть эти комиты в нашу ветку.
git checkout feature
git merge master (git merge feature master)
тогда все новшества из мастера попадут в фичу в виде одного отдельного комита не нарушая историю комитов в фича-ветке.
master-branch: MC -> MC -> |
feature-branch: |> FC -> FC -> mergeC -> FC -> mergeC -> FC -> …
Бэстпрактис, если над веткой работают несколько человек.
git checkout feature
git rebase master: git обновит последний комит мастера и привяжет к нему первый комит фичи.
вся история фича-комитов привяжется к последнему коммиту в мастере
master-branch: MC -> MC -> |
feature-branch: |> FC -> FC -> FC -> …
Бэст практис, если я один в ветке или если можно договориться с коллегами: перед мерджем в мастер (pull-request) сквашить все коммиты ветки в 1 + ребейзиться от мастера
Если мы хотим запушить в мастер, но были коммиты между initial pull и текущим моментом, надо скачать main, решить конфликты и тогда уже пушить:
git pull –rebase origin main
-rebase сообщает системе Git, что после синхронизации этой ветки с изменениями из центрального репозитория необходимо переместить все коммиты в конец ветки main
Интетактивный rebase
git rebase -i master
cherry pick
позволяет перемещать комиты мужду ветками.
git chery-pick hash // вызываем в той ветке, в которую тянем
git chery-pick hash -edit //изменить комит месадж
git chery-pick hash –no-commit //не комитить, просто добавить изменения в workdir
- bug hotfix - починить фичу в своей ветке и добавить этот комит в мастер
- перенести нужные комиты из “заброшенных” веток.
master-branch: A -> B -> | -> C -> D -> F
…………………………………………|…………………….|
…………………………………………|…………|>——|
………… feature-branch: |> E -> F -> G ->
amend
изменить последний комит: гит заменяет последний комит на свежий, хэш поменяется.
git commit –amend
revert
когда хотим удалить 1 из комитов в истории: создастся новый коммит в конце ветки.
$ git revert commit reference
troubleshooting