Допустим, у нас есть следующая ситуация в Git:
Созданный репозиторий:
mkdir GitTest2 cd GitTest2 git initНекоторые изменения в мастере происходят и совершаются:
echo "On Master" > file git commit -a -m "Initial commit"Feature1 разветвлен от мастера, и некоторая работа сделана:
git branch feature1 git checkout feature1 echo "Feature1" > featureFile git commit -a -m "Commit for feature1"Тем временем в мастер-коде обнаружена ошибка и установлена ветка исправлений:
git checkout master git branch hotfix1 git checkout hotfix1Ошибка исправлена в ветке исправлений и объединена с мастером (возможно, после запроса на просмотр / проверки кода):
echo "Bugfix" > bugfixFile git commit -a -m "Bugfix Commit" git checkout master git merge --no-ff hotfix1Разработка на feature1 продолжается:
git checkout feature1
Скажем, мне нужно исправление в моей ветке функций, возможно, потому что ошибка также происходит там. Как я могу добиться этого, не дублируя коммиты в моей ветке функций?
Я хочу запретить получение двух новых коммитов в моей ветви функций, которые не имеют отношения к реализации функции. Это особенно важно для меня, если я использую pull-запросы: все эти коммиты также будут включены в pull-запрос и должны быть проверены, хотя это уже было сделано (так как исправление уже есть в master).
Я не могу сделать git merge master --ff-only: «роковым: невозможно выполнить перемотку вперед, прерывание». Но я не уверен, помогло ли это мне.
git rebaseдля меня это похоже на черную магию ...
git branch feature1и git checkout feature1можно объединить в git checkout -b feature14. и можно полностью сократить доgit checkout -b hotfix1 master
feature1полностью локальный, посмотритеgit rebase.