Как правильно использовать Git cherry-pick

Я знаю что мы используем cherry-pick чтобы получить контент от определенного коммита в нашу текущую ветку.

Я объясню ситуацию и нуждаюсь в некоторой помощи, чтобы полностью понять cherry-pick и быть уверенным, что это правильный способ решить мою проблему.

Представьте, что у нас есть два разработчика: Боб и Том, и они работали над одними и теми же файлами.

У Боба есть солидная ветвь, которая уже находится в производстве.
У Тома есть работа над будущим релизом, которой нет у Боба.
У Боба также может быть работа, которой нет у Тома.
Боб хочет работы Тома, но ему нужно получить одну за другой и проверить ее перед отправкой в ​​производство. Разве "вишня" не перезаписывает работу Боба? Если да, как правильно поступить в этой ситуации?

1 ответ

Я знаю, что мы используем cherry-pick, чтобы получить контент из определенного коммита в нашу текущую ветку.

...

Разве "вишня" не перезаписывает работу Боба?

Это может помочь понять, что cherry-pick не приносит "контент" из другого коммита. Он применяет изменения, равные патчу, между другим коммитом и его родителем. Из документов ( https://git-scm.com/docs/git-cherry-pick):

Применить изменения, внесенные некоторыми существующими коммитами

(выделение добавлено).

Так что, как ожидается, слияние не перезапишет работу Боба, сбор вишни не перезапишет работу Боба. Возможно, что изменение, внесенное cherry-pick, вступит в конфликт с изменением работы Боба, и это должно быть решено.

Большая потенциальная проблема заключается в том, что git не будет помнить, после того факта, что коммит, который он создает для Боба, связан с оригинальным коммитом Тома. Если вы в конечном итоге скомбинируете ветви, перебрасывая одну поверх другой, тогда это может быть нормально - потому что rebase будет сравнивать значения "ID патча", чтобы решить, следует ли пропустить воспроизведение данного коммита. Если вы в конечном итоге объедините их путем слияния, вам, возможно, придется разрешать конфликты, которые не имеют смысла.

Другие вопросы по тегам