Допустим, у нас есть следующая ситуация в 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 feature1
4. и можно полностью сократить доgit checkout -b hotfix1 master
feature1
полностью локальный, посмотритеgit rebase
.