Как создать Третичную Ветвь функций С правильным отличием Git

#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>