#git #github #branch #branching-and-merging #git-diff
Вопрос:
Если я хочу создать новую функцию, ответвляющуюся от мастера, я могу это сделать:
$ git checkout master
$ git checkout -b myFirstFeature
Но предположим, что теперь у меня есть эта ветвь в PR, которая ждет объединения, и я хочу поработать над чем-то другим, что зависит от изменений, которые происходят в этой ветви. В этом случае я мог бы создать третичную ветвь, выполнив:
$ git checkout myFirstFeature
$ git checkout -b mySecondFeature
Так что теперь я установил myFirstFeature
как выше по течению mySecondFeature
, и у меня есть доступ ко всем изменениям там, и я могу начать их развивать, чего я и хотел. Мило!
Однако проблема в том, что , когда я размещаю PR для mySecondFeature
, Git включает в себя все изменения из myFirstBranch
diff для mySecondFeature
, а не только то, что я на самом деле сделал mySecondFeature
.
Он даже включает в себя изменения, которые произошли в любое время, когда я вытащил master, т. Е. Существовали любые другие PR, которые были объединены за это время myFirstFeature
.
Так что теперь mySecondFeature
на GitHub есть разница примерно в 200 файлов, хотя лично я отредактировал только 3 или 4 в этой ветке.
Как я могу достичь своей цели-создать новую третичную ветвь функции из существующей не объединенной ветви функции, не нарушая полностью мои различия в git?
Спасибо!
Комментарии:
1. Следите за словом » вверх по течению», которое имеет техническое определение в Git (что это не соответствует) и другое распространенное использование в Git (что это также не соответствует), а также означает именно то, что вы его используете. Так что это означает три разные вещи. 🙂
Ответ №1:
Начните с PR, в котором вас просят объединиться mySecondFeature
myFirstFeature
.
Обновите целевую ветвь этого PR до master
после myFirstFeature
того, как она будет объединена master
.
Ответ №2:
Вот решение:
git checkout master
git checkout -b new_branch
(создайте новую ветвь)
git merge --squash old_branch
(слияние в ветви зависимых функций)
если вы сделали это неправильно в первый раз и теперь у вас есть работа над другой ветвью , к которой вы хотите подключиться new-branch
, сделайте это:
git cherry-pick <oldest_commit>^..<newest_commit>